AngularJs事件机制

本文详细解析了AngularJS中控制器间通信的多种方式,包括$broadcast、$emit、$on等方法的应用,以及如何通过事件的命名空间避免冲突,确保应用的稳定性和可维护性。
1.类似于订阅/发布模式
2.$scope.$broadcast 向子控制器发送【最直接的关系,$scope.$on用于监听】
3.$scope.$emit 向父控制器发送【最直接的关系,$scope.$on用于监听】
4.如果同级控制器传递消息,则采用先发送到父级(emit),再从父级发到目标控制器的方式,即$scope.$parent.$broadcast('myevent', 'Some data');
5.$rootscope是所有scope的父,同样具备broadcast/emit/on方法
6.$rootscope.$emit会被$rootscope.$on监听
7.$rootscope.$broadcast会被所有$scope.$on监听,也包括$rootscope.$on
8.取消订阅:
var myListener = $scope.$on('child', function (event, data) {
    // do something
  });
// unsubscribes...
  // this would probably sit in a callback or something
  myListener();
 
9.当使用$rootscope.on时,我们需要语句$scope.$on('$destroy', myListener);手动销毁监听器
10.当用$emit时,如果想阻止冒泡事件,可以这样用:
$scope.$on('myCustomEvent', function (event, data) {
  event.stopPropagation();
});
11,所有事件监听器存放于$rootScope.$$listeners,可以通过语句$rootScope.$$listeners.myEventName=[]重置,但不建议这样做。
12.订阅/发布事件建议采用命名空间,避免冲突,类似如下:
$scope.$emit('inbox:send'[, data]);
$scope.$on('inbox:send', function (event, data) {...});
 
$scope.$broadcast('inbox:delete'[, data]);
$scope.$on('inbox:delete', function (event, data) {...});
 
$scope.$emit('inbox:save'[, data]);
$scope.$on('inbox:save', function (event, data) {...});
 

转载于:https://www.cnblogs.com/enjoylearning/p/5940997.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值