2013-02-10 28 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