如何调用$ scope。$ on work和$ destroy?

时间:2016-09-26 18:15:03

标签: javascript angularjs angularjs-scope

任何人都可以解释$scope.$on的工作情况以及$destroy如何在这两个控制器中工作。就像我改变路由时,会调用另一个控制器,这就是调用$destroy的原因吗? 如何$interval初始化,我刚刚将它定义为promiseA下的变量,但它被初始化。我只是复制了这些行以满足要求,有人可以帮我理解这些代码行吗?

        var myApp=angular.module('myApp',['ngRoute']);
        myApp.controller('myController',function($scope){


        });
        myApp.controller('firstPage',function($scope,$interval){

            $scope.thisMessage="First Message";
            $scope.firstcall=function(){
                var promiseA=$interval(function(){

                        console.log("First Page");
                    },10000);
                $scope.$on('$destroy',function(){
                    $interval.cancel(promiseA);
                });
            }
            });
        myApp.controller('secondPage',function($scope,$interval){
            $scope.thisMessage="Second Message";

            $scope.thisMessage="Second Message";
            $scope.secondcall=function(){
                var promiseB=$interval(function(){

                        console.log("Second Page");

                },10000);
                $scope.$on('$destroy',function(){
                    $interval.cancel(promiseB);
                });
            }
        });

        myApp.config(function($routeProvider){
            $routeProvider.when("/",{
                templateUrl:"First.html"
                })
            .when("/second",{
                templateUrl:"Second.html"
            });
        });

1 个答案:

答案 0 :(得分:0)

使用$scope.$on的长话短说明您可以为角度内部事件添加侦听器(订阅)以及您可以使用fix PR$emit服务自行触发的自定义事件。 $destroy本身是一个在控制器被销毁时被触发的事件,所以如果你想保存一些数据或者你想做什么,你就有了一个钩子。

您可以在Angular的文档$broadcast中找到有关此类内容的更多信息。

鉴于您在切换路线时每条路线都有不同的控制器,您实例化一条路线并销毁另一条路线(触发您正在侦听的$destroy事件)。

我还建议您查看$off方法,这是您可以取消订阅事件,避免内存泄漏和奇怪行为的方法。不幸的是,我无法找到任何关于此的文档,但它基本上是如何工作的,你订阅了这样的事件:

$scope.$on('customEvent', someFunction);

你取消订阅如下:

$scope.$on('$destroy', function() {
    $scope.$off('customEvent', someFunction);
});

请注意,您不必在$destroy听众中取消订阅,但我认为这是最佳做法。

相关问题