2016-09-26 2 views
1

Может ли кто-нибудь объяснить работу $scope.$on и как работает $destroy в этих двух контроллерах. Например, когда я меняю маршрут, вызывается другой контроллер, поэтому используется $destroy? И как инициализируется $interval, я только что определил его как переменную под обещанием, но она инициализируется. Я просто скопировал эти строки, чтобы выполнить это требование, может ли кто-нибудь помочь мне понять эти строки кодов?

 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" 
      }); 
     }); 

ответ

0

Короче говоря, используя $scope.$on вы можете добавить слушателей (подписаться) на угловую внутренние события, а также пользовательские события, которые вы можете вызвать себя с помощью $emit и $broadcast услуг. Сам $destroy является событием, которое запускается при уничтожении контроллера, поэтому у вас есть крючок, если вы, возможно, захотите сохранить некоторые данные или что бы вы ни делали.

Дополнительную информацию об этом материале можно найти в документации Angular here.

Учитывая, что каждый из ваших маршрутов имеет другой контроллер, когда вы переключаете маршруты, которые вы создаете, и уничтожаете другой (который вызывает событие $destroy, которое вы слушаете).

Я также рекомендую вам ознакомиться с методом $off, который позволяет отказаться от подписки на события, избегая утечек памяти и странного поведения. К сожалению, я не смог найти каких-либо документы о том, что но, как он в основном работает, вы подписаться на события, как это:

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

И отписать как это:

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

Имейте в виду, что вам на самом деле не нужно отказываться от подписки внутри слушателя $destroy, но я думаю, что это лучшая практика.

+0

Hi Peter. большое спасибо – evilBops

Смежные вопросы