リソースを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は、ダイジェストがすでに進行中であると文句を言います。
ビューが更新されない理由を誰かに教えてもらえますか?