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插件开发全解析
Oct 10 Javascript
jQuery拖拽 &amp; 弹出层 介绍与示例
Dec 27 Javascript
javascript实现获取浏览器版本、操作系统类型
Jan 29 Javascript
jQuery的animate函数实现图文切换动画效果
May 03 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
Aug 13 Javascript
深入理解JavaScript函数参数(推荐)
Jul 26 Javascript
javascript 中Cookie读、写与删除操作
Mar 29 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
Aug 04 Javascript
vue element项目引入icon图标的方法
Jun 06 Javascript
详谈js的变量提升以及使用方法
Oct 06 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
Jul 23 Javascript
JavaScript canvas实现跟随鼠标事件
Feb 10 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 cookie 作用范围?不要在当前页面使用你的cookie
2009/03/24 PHP
PHP的PDO预处理语句与存储过程
2019/01/27 PHP
js的with语句使用方法
2007/09/21 Javascript
jquery 图片轮换效果
2010/07/29 Javascript
来自国外的14个图片放大编辑的jQuery插件整理
2010/10/20 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
js检验密码强度(低中高)附图
2014/06/05 Javascript
浅谈EasyUI中Treegrid节点的删除
2015/03/01 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
【经典源码收藏】基于jQuery的项目常见函数封装集合
2016/06/07 Javascript
利用JS提交表单的几种方法和验证(必看篇)
2016/09/17 Javascript
JS中的phototype详解
2017/02/04 Javascript
vuejs指令详解
2017/02/07 Javascript
jQuery简单实现MD5加密的方法
2017/03/03 Javascript
JavaScript实现换肤功能
2017/09/15 Javascript
详谈构造函数加括号与不加括号的区别
2017/10/26 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
Python实现一个服务器监听多个客户端请求
2018/04/12 Python
python-视频分帧&amp;多帧合成视频实例
2019/12/10 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
python简单实现9宫格图片实例
2020/09/03 Python
HTML5+Canvas+CSS3实现齐天大圣孙悟空腾云驾雾效果
2016/04/26 HTML / CSS
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
英国计算机商店:Technextday
2019/12/28 全球购物
外贸英语专业求职信范文
2013/12/25 职场文书
小学数学教学反思
2014/02/02 职场文书
《猴子种树》教学反思
2014/02/14 职场文书
护士岗位职责
2014/02/16 职场文书
金融管理应届生求职信
2014/02/20 职场文书
感恩的演讲稿
2014/05/06 职场文书
跑操口号
2014/06/12 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
R9700摩机记
2022/04/05 无线电