Angularjs的Controller间通信机制实例分析


Posted in Javascript onNovember 07, 2016

本文实例讲述了Angularjs的Controller间通信机制。分享给大家供大家参考,具体如下:

在Angularjs开发一些经验总结中提到我们需要按照业务区分angular controller,避免过大无所不能的上帝controller,我们把controller分离开了,但是有时候我们需要在controller中通信,一般为比较简单的通信机制,告诉同伴controller我的某个你所关心的东西改变了,怎么办?如果你是一个javascript程序员你会很自然的想到异步回调响应式通信—事件机制(或消息机制)。对,这就是angularjs解决controller之间通信的机制,所推荐的唯一方式,简而言之这就是angular way。

Angularjs为在scope中为我们提供了冒泡和隧道机制,$broadcast会把事件广播给所有子controller,而$emit则会将事件冒泡传递给父controller,$on则是angularjs的事件注册函数,有了这一些我们就能很快的以angularjs的方式去解决angularjs controller之间的通信,代码如下:

View:

<div ng-app="app" ng-controller="parentCtr">
  <div ng-controller="childCtr1">name :
    <input ng-model="name" type="text" ng-change="change(name);" />
  </div>
  <div ng-controller="childCtr2">Ctr1 name:
    <input ng-model="ctr1Name" />
  </div>
</div>

Controller:

angular.module("app", []).controller("parentCtr",
function ($scope) {
  $scope.$on("Ctr1NameChange",
  function (event, msg) {
    console.log("parent", msg);
    $scope.$broadcast("Ctr1NameChangeFromParrent", msg);
  });
}).controller("childCtr1", function ($scope) {
  $scope.change = function (name) {
    console.log("childCtr1", name);
    $scope.$emit("Ctr1NameChange", name);
  };
}).controller("childCtr2", function ($scope) {
  $scope.$on("Ctr1NameChangeFromParrent",
  function (event, msg) {
    console.log("childCtr2", msg);
    $scope.ctr1Name = msg;
  });
});

这里childCtr1的name改变会以冒泡传递给父controller,而父controller会对事件包装在广播给所有子controller,而childCtr2则注册了change事件,并改变自己。注意父controller在广播时候一定要改变事件name

jsfiddle链接:http://jsfiddle.net/whitewolf/5JBA7/15/

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
Javascript中的数学函数集合
May 08 Javascript
javascript实现上传图片前的预览(TX的面试题)
Aug 20 Javascript
jquery tools 系列 scrollable(2)
Sep 06 Javascript
iframe 异步加载技术及性能分析
Jul 19 Javascript
JavaScript高级程序设计(第3版)学习笔记3 js简单数据类型
Oct 11 Javascript
js propertychange和oninput事件
Sep 28 Javascript
JavaScript实现弹出子窗口并传值给父窗口
Dec 18 Javascript
javascript闭包(Closure)用法实例简析
Nov 30 Javascript
Jquery实现select multiple左右添加和删除功能的简单实例
May 26 Javascript
angular.JS实现网页禁用调试、复制和剪切
Mar 31 Javascript
vue-cli项目无法用本机IP访问的解决方法
Sep 20 Javascript
详解angular2 控制视图的封装模式
Dec 27 Javascript
jquery组件WebUploader文件上传用法详解
Oct 23 #Javascript
Vue.js 和 MVVM 的注意事项
Nov 07 #Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
Nov 07 #Javascript
基于Phantomjs生成PDF的实现方法
Nov 07 #Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
Nov 07 #Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
Nov 07 #Javascript
jQuery插件WebUploader实现文件上传
Nov 07 #Javascript
You might like
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
使用PHP下载CSS文件中的图片的代码
2013/09/24 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
解析WordPress中函数钩子hook的作用及基本用法
2015/12/22 PHP
jQuery select控制插件
2009/08/17 Javascript
腾讯的ip接口 方便获取当前用户的ip地理位置
2010/11/25 Javascript
用JS判别浏览器种类以及IE版本的几种方法小结
2011/08/02 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
关于Javascript作用域链的八点总结
2013/12/06 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
Hallo.js基于jQuery UI所见即所得的Web编辑器
2016/01/26 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
js仿淘宝商品放大预览功能
2017/03/15 Javascript
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
浅谈vue中关于checkbox数据绑定v-model指令的个人理解
2018/11/14 Javascript
node Buffer缓存区常见操作示例
2019/05/04 Javascript
Vue实现图片与文字混输效果
2019/12/04 Javascript
wxPython中文教程入门实例
2014/06/09 Python
python使用wxPython打开并播放wav文件的方法
2015/04/24 Python
python中使用iterrows()对dataframe进行遍历的实例
2018/06/09 Python
Python  unittest单元测试框架的使用
2018/09/08 Python
Python面向对象程序设计类的多态用法详解
2019/04/12 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
利用python 读写csv文件
2020/09/10 Python
中国高端家电购物商城:顺电
2018/03/04 全球购物
SIDESTEP荷兰:在线购买鞋子
2019/11/18 全球购物
双十佳事迹材料
2014/01/29 职场文书
学雷锋活动总结范文
2014/04/25 职场文书
促销活动总结模板
2014/07/01 职场文书
食品委托检验协议书范本
2014/09/12 职场文书
董事长岗位职责
2015/02/13 职场文书
科技活动总结范文
2015/05/11 职场文书
高一军训感想
2015/08/07 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书
微信小程序基础教程之echart的使用
2021/06/01 Javascript