如何从另一个控制器的范围访问一个控制器中定义的变量?

时间:2014-11-28 22:29:08

标签: angularjs controller angularjs-scope

我有以下控制器: HeaderCtrlNewsFeedCtrlMainCtrl

MainCtrl包含其他两个控制器,它们处于同一级别。

我在authenticationService中定义了一个对象,并在MainCtrl中更新了它的值,我在NewsFeedCtrl中经常更新它,我希望在HTML页面控件中显示它的值HeaderCtrl

当我在HeaderCtrl中使用此行时:

$scope.unreadNum=authenticationService.notificationList.length;

然后我在HTML页面中使用数据绑定来显示其值:

{{unreadNum}}

我只获取authenticationService中插入的初始值,而不是其他控制器中更新后的值。 似乎我的HeaderCtrl只定义了他的所有范围对象一次,然后不再使用Ctrl,但我还是希望他的HTML页面在其他对象值更新后更新控制器。

总结一下:我想要的对象的值存储在我的一个服务中,我无法在我的HTML页面中显示它,因为我似乎无法正确绑定它。

1 个答案:

答案 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;
   });