Angular JS将msg广播到多个视图,包括模态窗口

时间:2013-11-04 19:02:15

标签: javascript angularjs twitter-bootstrap

我有一项服务,用于处理需要它的控制器的消息广播。

服务:

.factory('mySharedService', function($rootScope) {
  var sharedService = {};

  sharedService.message = '';

  sharedService.prepForBroadcast = function(msg) {
    this.message = msg;
    this.broadcastItem();
  };

  sharedService.broadcastItem = function() {
    $rootScope.$broadcast('handleBroadcast');
  };
  return sharedService;
}); 

CNTL:

function AlertCtrl($scope, mySharedService) {
  $scope.msgs = [];
  $scope.$on('handleBroadcast', function() {
    $scope.msgs.push(mySharedService.message);
  });  
  $scope.closeAlert = function(index) {
    $scope.msgs.splice(index, 1);
  };
}

HTML:

<div ng-controller="AlertCtrl">
  <alert ng-repeat="msg in msgs" type="msg.type" close="closeAlert($index)">{{msg.msg}}</alert>
</div>

所以我删除HTML片段的任何地方都会按预期显示消息,如果它在模态窗口中则除外。

我的问题是:如何在模态窗口中显示广播的消息?

这是plnkr:http://plnkr.co/edit/l6ohBYRBMftpfxiKXvLr?p=preview

2 个答案:

答案 0 :(得分:0)

您可以将参数传递给$ broadcast方法,这样您就可以: $rootScope.$broadcast('handleBroadcast', 'your message here');

并在你的听众中:

$scope.$on('handleBroadcast', function(ev, arg){
    $scope.msgs.push(msg);
});

看看:http://docs.angularjs.org/api/ng。$ rootScope.Scope#methods_ $ broadcast

答案 1 :(得分:0)

主页面中有一个AlertCtrl实例,每当模态打开时都会创建另一个实例(添加console.log来验证这一点)。模型内的AlertCtrl实例化,并在广播事件后开始侦听