在 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/