Javascript 在web服务调用后使用具有数组长度的ng show

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',

如果数组的大小为0,我尝试显示一个警报框。数组由web服务调用填充,因此当控制器加载时为0。解决承诺后,将填充阵列,但警报仍保留在页面上

承诺完成后,如何更新警报的视图状态?以下是我到目前为止的情况:

<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;
    });
});