Page 307 - AngularJS权威教程
P. 307
20.2 事件传播 287
19
第20章 20
事 件
21
22
在Web应用的组件是松耦合的情况下,比如需要用户验证然后处理授权,即时的通信不总是 23
可行的,因为组件没有耦合在一起 。
例如,如果后端对一个请求返回了状态码401(表明一个未经授权的请求),我们期望Web 24
应用不允许用户停留在当前视图,在这种情况下,我们希望应用把用户重定向到登录或者注册
页面去。 25
基于这个逻辑,我们不能从外部告诉控制器设置一个新地址。我们也希望这个功能能覆盖多
个作用域,这样可以用相同的行为来保护这些作用域。 26
我们需要另一种方式在它们之间通信。
27
Angular的作用域在本质上是分层次的:它们可以通过父子关系很自然地来回沟通。但通常,
作用域是不共享变量的,它们执行的功能往往各不相同,跟在父树上的位置无关。
28
在这种情况下,我们可以通过在这个链上传递事件的方式在作用域之间通信。
20.1 什么是事件 29
如同浏览器响应浏览器层的事件,比如鼠标点击、页面滚动那样,Angular应用也可以响应 30
Angular事件。这使我们可以在应用中嵌套的各组件之间进行通信,即使这些组件在创建时并未
考虑到其他组件。
31
注意,Angular事件系统并不与浏览器的事件系统相通,这意味着,我们只能在
作用域上监听Angular事件而不是DOM事件。 32
我们可以认为,事件是在应用中传播的信息片段,通常(可选)包含了在应用中发生的事情 33
的信息。
34
20.2 事件传播
因为作用域是有层次的,所以我们可以在作用域链上传递事件。 35
通常来说,选择要使用的事件传递方式,一个好的经验法则是:查看将要触发事件的作用域。
如果要通知整个事件系统(允许任意作用域处理这个事件),就要往下广播。 36