我了解$Broadcast()
,$Emit()
和$On()
用于在一个控制器中引发事件并在另一个控制器中处理。如果可能,有人可以给我一些关于上述三种用法的实时示例,因为我是angular JS
的新手吗?
我已浏览以下链接并了解基本用法。
http://www.binaryintellect.net/articles/5d8be0b6-e294-457e-82b0-ba7cc10cae0e.aspx
答案 0 :(得分:106)
<强> $ EMIT 强>
它通过范围层次结构向上调度事件名称,并通知已注册的$rootScope.Scope
侦听器。事件生命周期从调用$emit
的范围开始。事件向上遍历根范围并沿途调用所有已注册的侦听器。如果其中一个侦听器取消它,该事件将停止传播。
<强> $广播强>
将事件名称向下调度到所有子范围(及其子级),并通知已注册的$rootScope.Scope
侦听器。事件生命周期从调用$broadcast
的范围开始。此范围内事件的所有侦听器都会收到通知。之后,事件向下遍历子范围,并在此过程中调用所有已注册的侦听器。该活动无法取消。
在$ 强>
它监听给定类型的事件。它可以捕获$broadcast
和$emit
发送的事件。
视觉演示:
演示工作代码,直观地显示范围树(父/子关系):
http://plnkr.co/edit/am6IDw?p=preview
演示方法调用:
$scope.$on('eventEmitedName', function(event, data) ...
$scope.broadcastEvent
$scope.emitEvent
答案 1 :(得分:15)
这个小例子展示了$rootScope
如何发出一个将被另一个控制器中的子范围监听的事件。
(function(){
angular
.module('ExampleApp',[]);
angular
.module('ExampleApp')
.controller('ExampleController1', Controller1);
Controller1.$inject = ['$rootScope'];
function Controller1($rootScope) {
var vm = this,
message = 'Hi my children scope boy';
vm.sayHi = sayHi;
function sayHi(){
$rootScope.$broadcast('greeting', message);
}
}
angular
.module('ExampleApp')
.controller('ExampleController2', Controller2);
Controller2.$inject = ['$scope'];
function Controller2($scope) {
var vm = this;
$scope.$on('greeting', listenGreeting)
function listenGreeting($event, message){
alert(['Message received',message].join(' : '));
}
}
})();
http://codepen.io/gpincheiraa/pen/xOZwqa
@gayathri底部的答案在技术上解释了范围角度概念及其实现$scope
和$rootScope
中所有这些方法的差异。
答案 2 :(得分:15)
$broadcast
或$emit
答案 3 :(得分:4)
这是一个关于agular事件的示例帖子,有一个很好的例子。如果你想要你可以通过可以。希望你能比你想象的更清楚这个角度事件。链接在这里 http://www.riaxe.com/blog/understanding-angulars-scope-and-rootscope-event-system-emit-broadcast-and-on/