2013-02-10 71 views
3

在angular.js中保存资源后,我想广播更改以便更新列表视图。收到广播消息后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抱怨摘要已在进行中。

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

回答

2

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

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

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

感谢您的回复。我回到这个问题,这一切都工作 - 也许这是一些兑现问题。 – plasma147 2013-02-25 23:55:34