赞
踩
Angular按照发布/订阅模式设计了其事件系统,使用时需要“发布”事件,并在适当的位置“订阅”或“退订”事件,就像邮箱里面大量的订阅邮件一样,当我们不需要时就可以将其退订了。具体到开发中,对应着$scope和$rootScope的$emit
、$broadcast
和$on
方法。本文介绍Angular的事件机制,包括$scope和$rootScope处理事件上的异同,$broadcast、$emit和$on的使用方式及他们区别等内容。
要理解Angular的事件机制,首先需要了解$scope
与$scope
之间的关系以及$scope
与$rootScope
之间的关系。$rootScope
是唯一真神,是万域起源,是所有$scope
的最终祖先。而$scope
与$scope
之间可能的关系包括父子关系和兄弟关系。还记得controller之间的关系吗,Angular为每个controller分配一个独立的$scope
,controller之间的关系也对应着$scope
之间的关系:
<div ng-controller="ParentCtrl as parent">
{
{ parent.data }}
<div ng-controller="SiblingOneCtrl as sib1">
{
{ sib1.data }}
</div>
<div ng-controller="SiblingTwoCtrl as sib2">
{
{ sib2.data }}
</div>
</div>
$broadcast
和$emit
用于发布事件,他们将事件名称和事件内容发布出去,就像是高考榜单一样,事件名称相当于考生的名字,而事件内容相当于考生的成绩等信息:
$scope.$broadcast('EVENT_NAME', 'Data to send');
$scope.$emit('EVENT_NAME', 'Data to send');
$on
用于订阅事件,事件名称是订阅的唯一标识,每个考生看榜单时都要寻找自己的名字,然后根据自己的成绩等信息决定下一步应该报考什么学校:
$scope.$on('EVENT_NAME', function(event, args) {
// balabala
});
Angular的退订事件有些奇怪,
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。