javascript - 收到广播消息后,Angular.js View 未更新

标签 javascript angularjs

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

    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 时这些 Controller 之间的通信正常。 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>

但在刷新之前不会更新。

这一切都是“在 Angular 内”(据我所知),我认为它会“正常工作”。我试过从回调中调用 $digest。 $apply 提示摘要已经在进行中。

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

最佳答案

我同意在事件到来时模型应该已经更新。它看起来像一个 Angular 错误。

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

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

关于javascript - 收到广播消息后,Angular.js View 未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14799881/

相关文章:

javascript - Jquery .each() 和 SetTimeout 随机时间

javascript - 导航栏在小屏幕上失去对齐

javascript - Angular Directive(指令)范围为空

javascript - 如何显示过滤后的 ng-repeat 数据的长度

javascript - Angular Directive - 在嵌入模板时替换标签

javascript - 在准备 70-480 Microsoft 考试时,我需要帮助理解为什么答案是正确的

javascript - 第二次访问用户后用 cookie 隐藏 div

javascript - 通过 jQuery 更改 src 值

javascript - 我怎样才能在另一个html中包含一个模板?

javascript - Protractor 与期望找到元素有关的问题