Javascript 在web服务调用后使用具有数组长度的ng show
如果数组的大小为0,我尝试显示一个警报框。数组由web服务调用填充,因此当控制器加载时为0。解决承诺后,将填充阵列,但警报仍保留在页面上 承诺完成后,如何更新警报的视图状态?以下是我到目前为止的情况:Javascript 在web服务调用后使用具有数组长度的ng show,javascript,angularjs,Javascript,Angularjs,如果数组的大小为0,我尝试显示一个警报框。数组由web服务调用填充,因此当控制器加载时为0。解决承诺后,将填充阵列,但警报仍保留在页面上 承诺完成后,如何更新警报的视图状态?以下是我到目前为止的情况: <div class="alert alert-danger" ng-show="!items.length">You have no items.</div> profile.controller('myController', ['$scope', '$http',
<div class="alert alert-danger" ng-show="!items.length">You have no items.</div>
profile.controller('myController', ['$scope', '$http', '$window',
function($scope, $http, $window) {
$http.get('/api/getItems').success(function(data) {
$scope.items = data;
});
}
]);
当我尝试使用apply函数时,我得到一个inprogress错误:
Error: [$rootScope:inprog] http://errors.angularjs.org/1.2.18/$rootScope/inprog?p0=%24digest
$http.get('/api/getItems').success(function(data) {
$scope.$apply(function () {
$scope.items = data;
});
});
当控制器加载时,我只是硬编码了items数组。。。div仍然显示。我猜您使用的是来自jQuery的$.get。尝试使用$http来解析承诺并更新ui
profile.controller('myController', ['$scope', '$http', '$window', function($scope, $http, $window) {
$http.get('/api/getItems')
.success(function(data) {
$scope.items = data;
});
});
除非这里没有显示代码,否则不需要
$timeout()
或$scope.$apply()
解析$http.get()
承诺后,填充$scope.items
值,并运行$digest
循环以更新视图,该视图将根据表达式的最新值(items.length
)显示/隐藏警报
演示不同类型的结果,并正确更新视图。您可以更改
.json
文件以生成空数组,您将看到警报正确显示/隐藏。使用。因为是异步调用,如下所示:
profile.controller('myController', ['$scope', '$http', '$window', function($scope, $http, $window) {
$http.get('/api/getItems').then(function(data) {
$scope.items = data;
});
});
$.get属于jQuery?您可以:
ng hide='items.length>0'
为什么会有所不同?所以我只是使用$timeout
而不是$http.get
创建了一个函数,它可以工作…我将它改为http。。。除了现在,我在apply error:[$rootScope:inprog]上得到一个inprogress错误,我的错误不是$.http而是$http.get()。你明白了吗?我还删除了$scope。$apply,我认为你不需要它,因为观察者应该知道这个变化
profile.controller('myController', ['$scope', '$http', '$window', function($scope, $http, $window) {
$http.get('/api/getItems').then(function(data) {
$scope.items = data;
});
});