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
   302   303   304   305   306   307   308   309   310   311   312