Angular.js视图在从广播接收消息后未被更新

时间:2013-02-10 16:31:32

标签: javascript angularjs

在angular.js中保存资源后,我想广播更改,以便更新列表视图。

    function EnvironmentCtrl($rootScope,  $scope, $location, $routeParams, environmentService) {
      environmentService.get($scope, $routeParams.id);
      $scope.id = $routeParams.id

      $scope.save = function(){
         $scope.environment.$save(function(data) {
           $rootScope.$broadcast("model-update");
         });
      } 
    }

   function NavController($scope, $http, $routeParams, environmentService) {
     environmentService.list($scope);
     $scope.$on("model-update", function(){
       environmentService.list(function(data){
         $scope.environments = data;
         console.log("update called", $scope.environments); 
       });
     });
   }

调用EnvironmentCtrl.save时这些控制器之间的通信正常。调用console.log,服务返回到回调的数据在$ scope中正确设置。

我服务的相关部分如下:

 services.factory('environmentService', [ '$resource', function($resource) {
   var environmentService = {};

   environmentService.list = function(callback) {
     var url = "/service/environment/"
     $resource(url).query(function(data) {
       callback(data);
     });
    }
    return environmentService;
  } ]);

我的观点如下:

  <li data-ng-repeat="env in environments">
    <a href="#/environment/{{env.id}}">{{env.name}}</a>
  </li>

但是直到刷新才会更新。

这就是“在角度范围内”(据我所知),我会认为它会'正常工作'。我试过在回调中调用$ digest。 $ apply抱怨摘要已在进行中。

有谁能告诉我为什么视图没有更新?

1 个答案:

答案 0 :(得分:2)

我同意,当事件到达时,模型应该已经更新。它看起来像角落里的一个错误。

直到那时你可以在$ timeout内发出事件,如果这对你有效。

$timeout(function() {$rootScope.$broadcast("model-update");}, 0);