AngularJS $on、$emit和$broadcast简单功能实例
2015-03-16 20:42
232 查看
我们知道,AngularJS的作用域是类似于JavaScript的原型继承的原理,作用于之间有一定的层次关系。AngularJS的每个作用域都有一个$rootScope的根作用域,其他的作用域
继承于这个作用域。但是很多作用域之间没有继承关系。在这种情况下,我们无法进行作用域之间的通信。解决这个问题
方法之一:在应用程序作用域中创建一个单例服务,用来解决所有子作用域之间的通信。
方法之二:通过AngularJS中的事件解决作用域之间的通信。即:
$emit:广播给父controller
$broadcast:广播给子controller
$on:有两个参数function(event,data),第一个参数是事件对象,第二个是接收到的消息。
$emit、$broadcast的局限在于他们只能分别向父controller和子controller传播。
例子:
html代码:
ChildCtrl我是来自$broadcast
ParentCtrl我是来自$emit
本文来自:(http://www.it165.net/pro/html/201404/12610.html)
继承于这个作用域。但是很多作用域之间没有继承关系。在这种情况下,我们无法进行作用域之间的通信。解决这个问题
方法之一:在应用程序作用域中创建一个单例服务,用来解决所有子作用域之间的通信。
方法之二:通过AngularJS中的事件解决作用域之间的通信。即:
$emit:广播给父controller
$broadcast:广播给子controller
$on:有两个参数function(event,data),第一个参数是事件对象,第二个是接收到的消息。
$emit、$broadcast的局限在于他们只能分别向父controller和子controller传播。
例子:
html代码:
<div ng-controller="ParentCtrl"> <!--父级--> <div ng-controller="SelfCtrl"> <!--自己--> <a ng-click="click()">click me</a> <div ng-controller="ChildCtrl"></div> <!--子级--> </div> <div ng-controller="BroCtrl"></div> <!--平级--> </div>js代码:
var myModule = angular.module('MyModule',[]); myModule.controller('SelfCtrl', function($scope) { $scope.click = function() { $scope.$broadcast('to-child', '我是来自$broadcast'); $scope.$emit('to-parent', '我是来自$emit'); } }); myModule.controller('ParentCtrl', function($scope) { $scope.$on('to-parent', function(event, data) { console.log('ParentCtrl', data); // 父级能得到值 }); $scope.$on('to-child', function(event, data) { console.log('ParentCtrl', data); // 子级得不到值 }); }); myModule.controller('ChildCtrl', function($scope) { $scope.$on('to-child', function(event, data) { console.log('ChildCtrl', data); // 子级能得到值 }); $scope.$on('to-parent', function(event, data) { console.log('ChildCtrl', data); // 父级得不到值 }); }); myModule.controller('BroCtrl', function($scope) { $scope.$on('to-parent', function(event, data) { console.log('BroCtrl', data); // 平级得不到值 }); $scope.$on('to-child', function(event, data) { console.log('BroCtrl', data); // 平级得不到值 }); });结果:
ChildCtrl我是来自$broadcast
ParentCtrl我是来自$emit
本文来自:(http://www.it165.net/pro/html/201404/12610.html)
相关文章推荐
- angularjs $on、$emit、$broadcast
- Angularjs Controller 间通信机制($on, $emit, $broadcast)
- JS小功能(onmouseover实现选择月份)实例代码
- js实现简单div拖拽功能实例
- 原生JS实现简单抽人名功能实例
- 本文实例讲述了AngularJS+bootstrap实现动态选择商品功能。分享给大家供大家参考,具体如下: 项目中后台一个商品库,新建活动时动态选择所需商品
- JS小功能(onmouseover实现选择月份)实例代码
- 简单实用angular.js购物车功能
- 用原生JS实现一个简单计算的功能实例
- angular js ng-route 路由简单实例
- JS小功能(onmouseover实现选择月份)实例代码
- AngularJS ng-controller 指令简单实例
- js实现简单锁屏功能实例
- Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
- js实现简单登录功能的实例代码
- AngularJS ng-blur 指令详解及简单实例
- AngularJS ng-change 指令的详解及简单实例
- Angular,js实现简单购物车功能
- JS实现的简单表单验证功能完整实例
- Avalonjs 实现简单购物车功能(实例代码)