我有以下控制器:
HeaderCtrl
,NewsFeedCtrl
,MainCtrl
MainCtrl
包含其他两个控制器,它们处于同一级别。
我在authenticationService
中定义了一个对象,并在MainCtrl
中更新了它的值,我在NewsFeedCtrl
中经常更新它,我希望在HTML页面控件中显示它的值HeaderCtrl
。
当我在HeaderCtrl
中使用此行时:
$scope.unreadNum=authenticationService.notificationList.length;
然后我在HTML页面中使用数据绑定来显示其值:
{{unreadNum}}
我只获取authenticationService
中插入的初始值,而不是其他控制器中更新后的值。
似乎我的HeaderCtrl
只定义了他的所有范围对象一次,然后不再使用Ctrl,但我还是希望他的HTML页面在其他对象值更新后更新控制器。
总结一下:我想要的对象的值存储在我的一个服务中,我无法在我的HTML页面中显示它,因为我似乎无法正确绑定它。
答案 0 :(得分:2)
您可以使用服务在控制器之间发送消息。该服务看起来像这样......
aModule.factory('messageService', function ($rootScope) {
var sharedService = {};
sharedService.message = {};
sharedService.prepForBroadcast = function(msg) {
this.message = msg;
this.broadcastItem();
};
sharedService.broadcastItem = function () {
$rootScope.$broadcast('handleBroadcast');
};
return sharedService;
});
在发送邮件的控制器中,注入此服务......
aModule.controller("sendingController", function ($scope, messageService) {
然后添加一个方法,将更改广播到正在监听的任何控制器......
$scope.sendMessage = function (someObject) {
messageService.prepForBroadcast(someObject);
},
在任何想要接收消息的控制器中,注入服务,并添加这样的处理程序以对消息执行某些操作...
$scope.$on('handleBroadcast', function() {
//update what you will..
$scope.something = messageService.message;
});