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限制输入字数,并提示剩余字数实现代码
Dec 24 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
May 08 Javascript
node.js中使用q.js实现api的promise化
Sep 17 Javascript
浅谈Javascript数据属性与访问器属性
Jul 26 Javascript
Javascript在IE和Firefox浏览器常见兼容性问题总结
Aug 03 Javascript
JavaScript实现两个select下拉框选项左移右移
Mar 09 Javascript
基于vue实现swipe轮播组件实例代码
May 24 Javascript
JS实现百度搜索接口及链接功能实例代码
Feb 02 Javascript
3分钟读懂移动端rem使用方法(推荐)
May 06 Javascript
JavaScript中关于base64的一些事
May 06 Javascript
vue axios post发送复杂对象问题
Jun 04 Javascript
layer.alert回调函数执行关闭弹窗的实例
Sep 11 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获取本周第一天和最后一天示例代码
2014/02/24 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
点击标签切换和自动切换DIV选项卡
2014/08/10 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
详解handlebars+require基本使用方法
2016/12/21 Javascript
vue中如何引入jQuery和Bootstrap
2017/04/10 jQuery
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
微信小程序的日期选择器的实例详解
2017/09/29 Javascript
React教程之封装一个Portal可复用组件的方法
2018/01/02 Javascript
Vue-Router2.X多种路由实现方式总结
2018/02/09 Javascript
NodeJs操作MongoDB教程之分页功能以及常见问题
2019/04/09 NodeJs
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
vue excel上传预览和table内容下载到excel文件中
2019/12/10 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
Python描述器descriptor详解
2015/02/03 Python
Python检测一个对象是否为字符串类的方法
2015/05/21 Python
Python3使用requests发闪存的方法
2016/05/11 Python
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
Win10下用Anaconda安装TensorFlow(图文教程)
2020/06/18 Python
详解如何在PyCharm控制台中输出彩色文字和背景
2020/08/17 Python
35款精致的 CSS3 和 HTML5 网页模板 推荐
2012/08/03 HTML / CSS
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
奇怪的鱼:Weird Fish
2018/03/18 全球购物
俄罗斯厨房产品购物网站:COOK HOUSE
2021/03/15 全球购物
发展部经理职责规定
2014/02/22 职场文书
工厂采购员岗位职责
2014/04/08 职场文书
骨干教师培训方案
2014/05/06 职场文书
教师求职自荐书
2014/06/14 职场文书
办护照工作证明
2014/10/01 职场文书
电工实训报告总结
2014/11/05 职场文书
初中生考试作弊检讨书
2014/12/14 职场文书
毕业设计致谢语
2015/05/14 职场文书
导游带团欢迎词
2015/09/30 职场文书