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做的一个随机点名程序
Feb 13 Javascript
javascript实现抽奖程序的简单实例
Jun 07 Javascript
js改变css样式的三种方法推荐
Jun 28 Javascript
canvas实现图像布局填充功能
Feb 06 Javascript
JS实现DIV高度自适应窗口示例
Feb 16 Javascript
js简易版购物车功能
Jun 17 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
Mar 02 Javascript
解决vue单页使用keep-alive页面返回不刷新的问题
Mar 13 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
Apr 19 Javascript
微信小程序滑动选择器的实现代码
Aug 10 Javascript
mockjs+vue页面直接展示数据的方法
Dec 19 Javascript
深入理解 ES6中的 Reflect用法
Jul 18 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
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
2014/06/25 PHP
php获取指定日期之间的各个周和月的起止时间
2014/11/24 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
2015/01/22 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
Javascript 日期处理之时区问题
2009/10/08 Javascript
extJs 常用到的增,删,改,查操作代码
2009/12/28 Javascript
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
一个简单的js动画效果代码
2010/07/20 Javascript
JS字符串累加Array不一定比字符串累加快(根据电脑配置)
2012/05/14 Javascript
JS实现切换标签页效果实例代码
2013/11/01 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
angularjs的一些优化小技巧
2014/12/06 Javascript
javascript闭包的理解
2015/04/01 Javascript
讲解JavaScript的Backbone.js框架的MVC结构设计理念
2016/02/14 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
layer弹出层全屏及关闭方法
2018/08/17 Javascript
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
在Python中使用pngquant压缩png图片的教程
2015/04/09 Python
python3抓取中文网页的方法
2015/07/28 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
2016/05/31 Python
Python中用字符串调用函数或方法示例代码
2017/08/04 Python
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
pyinstaller参数介绍以及总结详解
2019/07/12 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
Python中常见的数制转换有哪些
2020/05/27 Python
Maison Lab荷兰:名牌Outlet购物
2018/08/10 全球购物
Linux开机引导的步骤是什么
2014/02/26 面试题
学生生病请假条范文
2014/02/16 职场文书
公司捐款倡议书
2014/05/14 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
2015入党个人自传范文
2015/06/26 职场文书
运动会新闻报道稿
2015/07/22 职场文书
2016年校园植树节广播稿
2015/12/17 职场文书
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android