AngularJS的学习 $on、$emit和$broadcast的使用
来源:互联网 发布:汕头网络问政 编辑:程序博客网 时间:2024/05/17 12:25
AngularJS中的作用域有一个非常有层次和嵌套分明的结构。其中它们都有一个主要的$rootScope
(也就说对应的Angular应用或者ng-app
),然后其他所有的作用域部分都是继承自这个$rootScope
的,或者说都是嵌套在主作用域下面的。很多时候,你会发现这些作用域不会共享变量或者说都不会从另一个原型继承什么。
那么在这种情况下,如何在作用域之间通信呢?其中一个选择就是在应用程序作用域之中创建一个单例服务,然后通过这个服务处理所有子作用域的通信。
在AngularJS中还有另外一个选择:通过作用域中的事件处理通信。但是这种方法有一些限制;例如,你并不能广泛的将事件传播到所有监控的作用域中。你必须选择是否与父级作用域或者子作用域通信。
$on、$emit和$broadcast使得event、data在controller之间的传递变的简单。
- $emit只能向parent controller传递event与data $broadcast只能向child controller传递event与data $on用于接收event与data
例子如下
html代码
1.
<div ng-controller=
"ParentCtrl"
> <!--父级-->
2.
<div ng-controller=
"SelfCtrl"
> <!--自己-->
3.
<a ng-click=
"click()"
>click me</a>
4.
<div ng-controller=
"ChildCtrl"
></div> <!--子级-->
5.
</div>
6.
<div ng-controller=
"BroCtrl"
></div> <!--平级-->
7.
</div><br>
js代码
01.
app.controller(
'SelfCtrl'
, function($scope) {
02.
$scope.click = function () {
03.
$scope.$broadcast(
'to-child'
,
'child'
);
04.
$scope.$emit(
'to-parent'
,
'parent'
);
05.
}
06.
});
07.
08.
app.controller(
'ParentCtrl'
, function($scope) {
09.
$scope.$on(
'to-parent'
, function(event,data) {
10.
console.log(
'ParentCtrl'
, data);
//父级能得到值
11.
});
12.
$scope.$on(
'to-child'
, function(event,data) {
13.
console.log(
'ParentCtrl'
, data);
//子级得不到值
14.
});
15.
});
16.
17.
app.controller(
'ChildCtrl'
, function($scope){
18.
$scope.$on(
'to-child'
, function(event,data) {
19.
console.log(
'ChildCtrl'
, data);
//子级能得到值
20.
});
21.
$scope.$on(
'to-parent'
, function(event,data) {
22.
console.log(
'ChildCtrl'
, data);
//父级得不到值
23.
});
24.
});
25.
26.
app.controller(
'BroCtrl'
, function($scope){
27.
$scope.$on(
'to-parent'
, function(event,data) {
28.
console.log(
'BroCtrl'
, data);
//平级得不到值
29.
});
30.
$scope.$on(
'to-child'
, function(event,data) {
31.
console.log(
'BroCtrl'
, data);
//平级得不到值
32.
});
33.
});
最终结果
ParentCtrl child
ChildCtrl parent
$emit和$broadcast可以传多个参数,$on也可以接收多个参数。
在$on的方法中的event事件参数,其对象的属性和方法如下
感觉比service在不同controller中通信要方便许多~~
0 0
- AngularJS的学习--$on、$emit和$broadcast
- AngularJS的 $on、$emit和$broadcast使用
- AngularJS $on、$emit和$broadcast的使用
- AngularJS $on、$emit和$broadcast的使用
- AngularJS的学习 $on、$emit和$broadcast的使用
- AngularJS的学习--$on、$emit和$broadcast的使用
- AngularJS的学习 $on、$emit和$broadcast的使用
- AngularJS的学习--$on、$emit和$broadcast的使用
- AngularJS的学习--$on、$emit和$broadcast的使用
- AngularJS的学习--$on、$emit和$broadcast的使用
- AngularJS的学习--$on、$emit和$broadcast的使用
- AngularJS的学习--$on、$emit和$broadcast的使用
- AngularJS的学习--$on、$emit和$broadcast的使用
- AngularJS的学习--$on、$emit和$broadcast的使用
- AngularJS的学习--$on、$emit和$broadcast的使用
- AngularJS的学习--$on、$emit和$broadcast的使用
- AngularJS的学习--$on、$emit和$broadcast的使用
- AngularJS的学习--$on、$emit和$broadcast的使用
- JS函数调用的四种方法
- python C/S模式基础编程 (网络安全系列)
- 进程间同步---system v ipc 对象信号灯集
- JSCalendar 日历控件
- OpenCV学习笔记(二十):Win8.1 64位+OpenCV 2.4.9+Python2.7.9配置
- AngularJS的学习 $on、$emit和$broadcast的使用
- 即时通讯 - netty4纪要
- textarea 在浏览器中固定大小和禁止拖动
- Servlet生命周期与工作原理
- dev 服务器调试过程
- BZOJ 4031 HEOI2015 小Z的房间 Matrix-Tree定理
- JQuery为元素添加样式
- 刘德华张学友即将同台演出
- jsp/servlet/struts/hibernate/spring内部实现机制