【发布时间】:2015-10-28 09:48:07
【问题描述】:
我希望多个控制器能够使用带有 $http 的工厂更新附加到一个控制器的单个视图。
我的列表视图:
<div class="list" ng-repeat="image in images" ng-controller="controller1">
<div lass="item"><img src="{{image.url}}" /></div>
</div>
服务:
.factory("imageService", function($http) {
return {
getImages: function() {
return $http({
method: "get",
url: "http://example.com/images",
params: { user: window.localStorage['user_id'] }
})
}
}
});
控制器 1:
.controller('controller1', function($scope, imageService) {
window.localStorage['user_id'] = '101';
var handleSuccess = function(data, status) {
$scope.images = data;
};
imageService.getImages().success(handleSuccess);
})
这一切都有效。加载应用后,列表会立即填充用户“101”的图像列表。
在另一个控制器中,我希望能够切换用户并使用新图像自动从控制器 1 重新填充视图中的图像列表。
控制器 2:
.controller('controller2', function($scope, imageService) {
window.localStorage['user_id'] = '202';
imageService.getImages();
})
所以控制器 2 将运行 getImages(),我可以看到 $http 请求通过 chrome 开发工具/XHR 工作。而且我知道为什么附加到 controller1 的列表视图没有填充,但我不知道如何填充它。我尝试将成功回调移动到服务中并在服务上设置“图像”属性并在控制器 1 中设置 $scope.images,但没有运气。
如何将新的图像列表强制添加到附加到控制器 1 的视图中?
【问题讨论】:
-
您可以从 rootScope 向控制器发出一个事件,并且发出处理的侦听器从 imageService 加载图像。
-
@tafoo85 是否需要使用 $rootScope 来更新图像列表?
-
不,我想不到快速两秒钟的解决方案。其他人的想法更好。
标签: angularjs