有人可以帮我了解应使用$rootScope.$on和的方式$scope.$on。
$rootScope.$on
$scope.$on
我知道它主要是用于听取不同的作用域($ rootScope和$ scope)。
我的查询适用于以下情况:
我应该使用: $ rootScope。$ emit 与 $ rootScope。$ on
要么
我应该选择: $ rootScope。$ with $ scope。$ on 广播 。 我知道这不是一个好选择,因为它将广播给所有$scopeobj。
$scope
我应该去: $ rootScope。$ broadcast 与 $ rootScope。$ on
如您所见,我需要在$ rootScope级别上处理事件。
以上3种实现有什么区别?
这是一个很好的问题,有一个解释给您。
$scope.on('event');会听$scope.$broadcast('event')&$rootScope.$broadcast('event')
$scope.on('event');
$scope.$broadcast('event')
$rootScope.$broadcast('event')
$rootScope.on('event');会听$rootScope.$broadcast('event')&$rootScope.$emit('event')
$rootScope.on('event');
$rootScope.$emit('event')
$scope.on();
$rootScope.$on()
$rootScope.on()
//bind event var registerScope = $rootScope.$on('someEvent', function(event) { console.log("fired"); }); // auto clean up `$rootScope` listener when controller getting destroy // listeners will be destroyed by calling the returned function like registerScope(); $scope.$on('$destroy', registerScope);
var myApp = angular.module('myApp',[]); myApp.controller('MyCtrl', function ($scope, $rootScope) { var registerScope = null; this.$onInit = function () { //register rootScope event registerScope = $rootScope.$on('someEvent', function(event) { console.log("fired"); }); } this.$onDestroy = function () { //unregister rootScope event by calling the return function registerScope(); } });
此plnkr将为您显示$scope.on()和 的不同行为$rootScope.on()。
$scope.on()
通过在此插入控件中切换视图,控制器将重新绑定到您的视图。该$rootScope.on();事件被绑定每次切换视图时不破坏前视图的事件绑定。这样,$rootScope.on()听众将被堆叠/倍增。$scope.on()绑定不会发生这种情况,因为它将通过切换视图而被破坏(在DOM中丢失E2E绑定表示形式->控制器被破坏了)。
$rootScope.on();
$emit
$broadcast
$rootScope.$emit()
$rootScope.$broadcast()
$scope.$emit()
$scope.$broadcast