Javascript 正在从内部更新ng show。然后()
我有一个在异步服务调用完成时显示的加载程序,只想在完成时隐藏加载程序。这是我的控制器:Javascript 正在从内部更新ng show。然后(),javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我有一个在异步服务调用完成时显示的加载程序,只想在完成时隐藏加载程序。这是我的控制器: app.controller('DataController', function($scope, DataService) { // UI state $scope.loading = true; DataService.getData({ "count": 10 }).then(function(data) { $scope.data = data;
app.controller('DataController',
function($scope, DataService) {
// UI state
$scope.loading = true;
DataService.getData({ "count": 10 }).then(function(data) {
$scope.data = data;
// UI state
$scope.loading = false; // does not update ng-view
$scope.$apply(function() { // generates error
$scope.loading = false;
});
});
});
以及以下观点:
<div ng-controller="DataController">
<div id="container">
<div>
{{ loading }}
</div>
<div class="spinner large" ng-show="loading"></div>
<div class="data-container" ng-show="!loading">
...
</div>
</div>
</div>
更新
由于这可能与承诺相关,下面是从DataService
工厂生成getData()
方法的承诺:
getData: function(params) {
var deferred = $q.defer();
APIService.data(params).then(function(data) {
deferred.resolve(data);
});
return deferred.promise;
}
最后一部分是APIService.data()
方法:
data: function(params) {
var deferred = $q.defer();
$resource(endpoint + '/data/feed', {}, {
'query': {
method: 'POST',
headers: headers
}
}).query(params).$promise.then(function(data) {
deferred.resolve(data);
});
return deferred.promise;
}
尝试使用
$scope.$evalAsync(function() {
$scope.loading = false;
});
我将通过将show/hide指令绑定到控制器中的data属性来解决这个问题。如果数据未定义,则与false相同
<div class="spinner large" ng-hide="data"></div>
<div class="data-container" ng-show="data">
发现了问题-由于这是一个Chrome扩展,我需要包含Angular CSS CSP文件,其中包含
ng hide
类定义。包含该文件导致代码按预期工作。谢谢大家的帮助。更多信息:
您不需要scope.apply。你的问题在别的地方。。这是控制器中的完整html吗?正如我所说的,在没有它的情况下尝试了它,并且视图的
ng show
部分没有更新-我缺少了一些其他内容?您是否有一个ng if,ng创建了一个封装该部分的子范围的内容?或者就是这样吗?除了更改专有服务名称/调用之外,就是这样。GetData返回promise的角度版本,对吗?它应该很好用。。检查这个好建议,旋转器没有被隐藏。啊,对不起。应该是相反的。更新的示例。如果填充了数据属性,则隐藏元素。
<div class="spinner large" ng-hide="data"></div>
<div class="data-container" ng-show="data">