有人可以帮我了解应使用$rootScope.$on
和的方式$scope.$on
。
我知道它主要是用于听取不同的作用域($ rootScope和$ scope)。
我的查询适用于以下情况:
我应该使用: $ rootScope。$ emit 与 $ rootScope。$ on
要么
我应该选择: $ rootScope。$ with $ scope。$ on 广播 。
我知道这不是一个好选择,因为它将广播给所有$scope
obj。
要么
我应该去: $ rootScope。$ broadcast 与 $ rootScope。$ on
如您所见,我需要在$ rootScope级别上处理事件。
以上3种实现有什么区别?
这是一个很好的问题,有一个解释给您。
$scope.on('event');
会听$scope.$broadcast('event')
&$rootScope.$broadcast('event')
$rootScope.on('event');
会听$rootScope.$broadcast('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()
。
通过在此插入控件中切换视图,控制器将重新绑定到您的视图。该$rootScope.on();
事件被绑定每次切换视图时不破坏前视图的事件绑定。这样,$rootScope.on()
听众将被堆叠/倍增。$scope.on()
绑定不会发生这种情况,因为它将通过切换视图而被破坏(在DOM中丢失E2E绑定表示形式->控制器被破坏了)。
$emit
&之间的区别$broadcast
是:$rootScope.$emit()
事件仅触发$rootScope.$on()
事件。$rootScope.$broadcast()
将触发$rootScope.$on()
& $scope.on()
事件(几乎所有听到此事件的事件)。$scope.$emit()
将触发其所有$scope.$on
所有父项(父级控制器中的作用域)和$rootScope.$on()
。$scope.$broadcast
将仅触发$scope
及其子项(子控制器中的作用域)。如何使用和方法将对象从一个控制器发送到另一个控制器? 它的工作方式并不像我想的那样。和如何工作?
问题内容: 现在,之间的性能差异和已被淘汰,没有任何理由,更喜欢到? 他们是不同的,是的。 仅限于范围层次结构(向上)-如果它适合您的设计,这可能很好,但是在我看来,这是一个相当随意的限制。 在所有 选择 收听此活动的人中都有效,这在我看来是一个更为明智的限制。 我想念什么吗? 编辑: 为了对回答做出澄清,调度的方向不是我要解决的问题。向上调度事件,-向下调度事件。但是,为什么不总是使用它来覆盖所
问题内容: 如何使用和方法将对象从一个控制器发送到另一个控制器? 它不按我认为的方式工作。如何做和工作? 问题答案: 首先,父子范围关系确实很重要。你有两种可能性发出某些事件: -将事件向下分发到所有子范围, -通过范围层次结构向上调度事件。 我对你的控制器(作用域)关系一无所知,但是有几种选择: 如果scope of 是作用域的父级,则你的代码应通过替换为来工作: 如果你的范围之间没有父子关系,
在swift中似乎有两个相等运算符:双相等()和三相等(),这两者有什么区别?
问题内容: 有什么方法比它还好用吗? 例如,我有一个示例代码,如下所示: 您可能会注意到,选择器只检索了一项,在我的情况下,页面加载时该名称已经存在;没有动态添加。重要的是要提到我使用的是最新版本的jQuery:1.7.2。 对于该示例,即使我不使用该功能提供的其他功能,也应使用该示例? 问题答案: 在内部,直接映射到当前版本的jQuery。(同样适用于。)因此,如果您改而使用,则对性能的影响很小
问题内容: 在MySQL中,和之间有什么区别?据我所知,只是语法更方便,而当列名不同时,则允许更多的灵活性。但是,这种差异是如此之小,您可能会以为他们会废除。 除了眼球以外,还有什么呢?如果是,在给定情况下应使用哪个? 问题答案: 它主要是语法糖,但是有一些区别值得注意: ON 是两者中更通用的。一个人可以在一个列,一组列甚至一个条件上联接表。例如: *当两个表共享它们所连接的名称完全相同的列时,