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 相关文章推荐
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
Mar 17 Javascript
jQuery遍历Table应用示例
Apr 09 Javascript
js分页代码分享
Apr 28 Javascript
跟我学习javascript的定时器
Nov 19 Javascript
基于Bootstrap里面的Button dropdown打造自定义select
May 30 Javascript
xcode中获取js文件的路径方法(推荐)
Nov 05 Javascript
jquery利用json实现页面之间传值的实例解析
Dec 12 Javascript
vue.js学习之UI组件开发教程
Jul 03 Javascript
vue 实现的树形菜的实例代码
Mar 19 Javascript
Vue SPA单页应用首屏优化实践
Jun 28 Javascript
vue-router 实现导航守卫(路由卫士)的实例代码
Sep 02 Javascript
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
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
分享一下贝贝成长进度的php代码
2012/09/14 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
php查找字符串出现次数的方法
2014/12/01 PHP
js 数据类型转换总结笔记
2011/01/17 Javascript
谷歌地图打不开的解决办法
2014/08/07 Javascript
js如何实现点击标签文字,文字在文本框出现
2015/08/05 Javascript
基于JS实现EOS隐藏错误提示层代码
2016/04/25 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
JavaScript无操作后屏保功能的实现方法
2017/07/04 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
Vue中Table组件Select的勾选和取消勾选事件详解
2019/03/19 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
2019/04/14 Javascript
js+HTML5 canvas 实现简单的加载条(进度条)功能示例
2019/07/16 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
微信小程序开发打开另一个小程序的实现方法
2020/05/17 Javascript
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
[41:17]完美世界DOTA2联赛PWL S3 access vs CPG 第二场 12.13
2020/12/17 DOTA
python字符串连接的N种方式总结
2014/09/17 Python
Python实现Mysql数据库连接池实例详解
2017/04/11 Python
Python用csv写入文件_消除空余行的方法
2018/07/06 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
Python使用python-docx读写word文档
2019/08/26 Python
python add_argument()用法解析
2020/01/29 Python
如何在mac下配置python虚拟环境
2020/07/06 Python
Eclipse面试题
2014/03/22 面试题
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
培训讲师邀请函
2014/01/10 职场文书
文员试用期转正自我鉴定
2014/09/14 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
商务邀请函
2015/01/30 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android
HTML常用标签超详细整理
2022/03/19 HTML / CSS
Python 图片添加美颜效果
2022/04/28 Python