2017-01-30 72 views
1

我想在应用程序中显示某个逻辑时显示按钮(某个按钮),然后隐藏此按钮。

通过单击某个按钮,我调用expand()将data.loading设置为true,此时我想要按钮出现,当我将data.loading设置为false时我想隐藏按钮,但视图不是更新。

<button ng-show="data.loading">Some Button</button> 
<button ng-click="expand(data)">Other Button</button> 

功能:

$scope.expand = function (data) { 
    data.loading = true; 
    // Some Button must be visible now 
    // Some logic here; 
    data.loading = false; 
    // Some Button must be invisible now 
} 

$范围$适用() - 返回错误:$正在进行

$ scope.safeApply()已经申请 - 不会抛出异常,但不更新视图。

$ timeout - 不更新视图。

+0

这里有什么'逻辑逻辑部分 - 你在视图中也有'nng-click'。 – tymeJV

+0

@tymeJV //这里的逻辑是调用api,nng点击它的错字,修复 –

+0

请发表逻辑 - 这可能是整个问题的原因... – tymeJV

回答

2

引用通过$scope属性数据模型与出当前消化周期的移动你的主要逻辑(与$timeout or $evalAsync)应该在你的情况下,解决“$已申请在进步”的消息一起:

$scope.expand = function() { 
    $scope.data.loading = true; 
    $timeout(function() { 
     // Some logic here; 
     $scope.data.loading = false; 
    }); 
}; 

我通常更喜欢(1)在服务内部保持加载进度,(2)使用承诺来管理进度状态。在下面的例子中,logicFunction()返回一个承诺。

$scope.expand = function() { 
    progressStatusService.started("Loading something…") 
    logicFunction().finally(function() { 
     progressStatusService.finished("Loading something…") 
    }); 
}; 
// progressStatusService implementation left as a challenge to the reader 

全球进步服务主要是面向应用级负载指示,如果加载状态只影响一个特定的部件,那么它可能是一个开销。

但是,延期/承诺方法可能通常有用且易于阅读(请参阅$q上的更多文档)。

1
$scope.expand = function() { 
    $scope.data.loading = true; 
    // Some Button must be visible now 
    // Some logic here; 
    $scope.data.loading = false; 
    // Some Button must be invisible now 
} 
0

按照@Sreehari的建议使用$scope.data.loading,在您查看时使用ng-if而不是ng-show

相关问题