AngularJS学习之路--- $on、$emit和$broadcast的使用
来源:互联网 发布:投诉淘宝店铺投诉电话 编辑:程序博客网 时间:2024/06/05 17:41
AngularJS API文档对scope(作用域)是这样描述的:
- 是一个存储应用数据模型的对象
- 为 表达式供了一个执行上下文
- 作用域的层级结构对应于 DOM 树结构
- 作用域可以监听 表达式的变化并传播事件
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
- <div ng-controller="ParentController"><!--父级-->
- <div ng-controller="SelfController"><!--自己-->
- <a ng-click="click()">Click me</a>
- <div ng-controller="ChildController"></div><!--子级-->
- </div>
- <div ng-controller="BroController"></div><!--平级-->
- </div>
JS
- ntangular.module('myapp',[])
- .controller('SelfController',function ($scope) {
- $scope.click = function() {
- $scope.$emit('toParent', 'SelfController中scope数据传到父级');
- $scope.$broadcast('toParent', 'SelfController中scope数据传到父级');
- };
- })
- .controller('ParentController',function ($scope) {
- $scope.$on('toParent', function (event,data) {
- console.log('父级接收到:',data);
- });
- $scope.$on('toChild', function (event,data) {
- console.log('父级接收到:',data);
- });
- })
- .controller('ChildController',function ($scope) {
- $scope.$on('toParent', function (event,data) {
- console.log('子级接收到:',data);
- });
- $scope.$on('toChild', function (event,data) {
- console.log('子级接收到:',data);
- });
- })
- .controller('BroController',function ($scope) {
- $scope.$on('toParent', function (event,data) {
- console.log('平级接收到:',data);
- });
- $scope.$on('toChild', function (event,data) {
- console.log('平级接收到:',data);
- });
- });
$emit和$broadcast可以传多个参数,$on也可以接收多个参数。
在$on的方法中的event事件参数,其对象的属性和方法如下
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的使用
- 安全之公开密钥基本知识
- miniUI Tabs 懒加载
- blocks 循环引用问题
- 图像分割—基于图的图像分割(Graph-BasedImageSegmentation)
- linux c 编程 log输出
- AngularJS学习之路--- $on、$emit和$broadcast的使用
- android里单例对象和某些数据被释放的问题
- 在doFilter方法中无法注入set方法 解决办法
- 借助 windbg 调试 句柄泄漏
- 一切成功源于积累——20150604 欧美 六年最大单日涨幅 6月2日 6月4日 半小时1600点
- vector的用法
- iMX6 USB OTG功能开发与测试
- TextView文字大小自适应
- spring+springmvc+shiro配置