Page 311 - AngularJS权威教程
P. 311

20.5  事件相关的核心服务    291


                  这个过程通常涉及获取视图模板和解析route属性上所有依赖项的时候。                                                 19
                  4. $routeChangeSuccess

                  在所有路由依赖项跟着 $routeChangeStart 被 解析之后, $routeChangeSuccess 被从                        20
              $rootScope上广播出来。
                  ngView指令使用$routeChangeSuccess事件来获悉何时实例化控制器并渲染视图。                                   21

                  5. $routeChangeError
                                                                                                     22
                  如果路由对象上任意的resolve属性被拒绝了,$routeChangeError就会被触发(比如它们失
              败了)。这个事件是从$rootScope上广播出来的。
                                                                                                     23
                  6. $routeUpdate
                  如果$routeProvider上的reloadOnSearch属性被设置成false,并且使用了控制器的同一个                           24
              实例,$routeUpdate事件会被从$rootScope上广播。

                  7. $destroy                                                                        25
                  在作用域被销毁之前, $destroy事件会在作用域上广播。这个顺序给子作用域一个机会,在
              父作用域被真正移除之前清理自身。                                                                       26

                  例如,如果我们在控制器中有一个正在运行的$timeout,我们不希望在包含它的控制器已经
              不存在的情况下,它还继续触发。                                                                        27
                   angular.module('myApp')
                       .controller('MainController', function($scope, $timeout) {
                           var timer;                                                                28
                           var updateTime = function() {
                               $scope.date = new Date();
                                   timer = $timeout(updateTime, 1000);                               29
                               }
                               // 开始更新时间
                               timer = $timeout(updateTime, 1000);                                   30

                               // 在销毁控制器之前
                               // 清除定时器
                               $scope.$on('$destroy', function() {                                   31
                                   if (timer) { $timeout.cancel(timer); }
                               });
                       });
                                                                                                     32


                                                                                                     33


                                                                                                     34


                                                                                                     35


                                                                                                     36
   306   307   308   309   310   311   312   313   314   315   316