这篇文章主要介绍了angular控制器通信的4种方式有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
首先概括一下angular控制器通信的4种方式:
作用域继承。
通过$scope广播事件。
事件发射器模块。
服务。
1、作用域的继承
子作用域可以访问声明在它们的祖先作用域中的变量和函数。
<div ng-controller="Controller1"><div ng-controller="Controller2">this prints '42':{{answer}}</div></div>m.controller('Controller1', function ($scope) {$scope.answer = 42;});m.controller('Controller2', function ($scope) {console.log($scope.answer);});
2、通过$scope广播事件
$emit调用可以向作用域上方冒泡,$broadcast将向子孙作用域传播,$on可以注册监听器。
<div ng-controller="Controller1"><div ng-controller="Controller2"></div></div>m.controller('Controller1', function ($scope) {$scope.$on('ping', function (){console.log('pong');});$scope.$broadcast('broadcast');});m.controller('Controller2', function ($scope) {$scope.$emit('ping');$scope.$on('broadcast', function (){console.log('broadcast');});});
3、事件发射器模块event-emitter
event-emitter模块工作方式类似于作用域发射器,它们有3个关键的区别:
event-emitter是独立于作用域的,所以在无法访问作用域的服务中使用它是非常理想的。
将使用的函数被命名为.on(),.emit()。
没有对应的$broadcast()函数。
<script type="text/javascript" src="angular.js"></script><script type="text/javascript" src="event-emitter.js"></script><script type="text/javascript">var app = angular.module('app', []); app.factory('userService', function ($timeout, $window) {var emitter = $window.emitter();var user = {}; //模拟http错误$timeout(function () {user.emit('error', 'Could not connect to server');}, 1000); return user;}); app.factory('profileService', function (userService) {var ret = {user: userService,}; userService.on('error', function () {console.log('get error');}); return ret;});</script>
4、最常用的通信是服务
因为服务是单例,所以在任何组件内改变服务的值都将影响其他组件,用法很简单,只要把服务列为依赖就可以了,如以上代码所示。
感谢你能够认真阅读完这篇文章,希望小编分享的“angular控制器通信的4种方式有哪些”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!