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解决iframe高度自适应代码
Dec 20 Javascript
javascript下判断一个元素是否存在的代码
Mar 05 Javascript
图标线性回归斜着移动到指定的位置
Aug 16 Javascript
网页收藏夹显示ICO图标(代码少)
Aug 04 Javascript
jquery-mobile表单的创建方法详解
Nov 23 Javascript
微信小程序之ES6与事项助手的功能实现
Nov 30 Javascript
JS实现数组去重复值的方法示例
Feb 18 Javascript
webpack4 SCSS提取和懒加载的示例
Sep 03 Javascript
vue 表单之通过v-model绑定单选按钮radio
May 13 Javascript
JS数组Reduce方法功能与用法实例详解
Apr 29 Javascript
js实现可爱的气泡特效
Sep 05 Javascript
vue实现Toast组件轻提示
Apr 10 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
实用函数7
2007/11/08 PHP
php实现XSS安全过滤的方法
2015/07/29 PHP
百度地图经纬度转换到腾讯地图/Google 对应的经纬度
2015/08/28 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
yii通过小物件生成view的方法
2016/10/08 PHP
PHP设计模式之注册树模式分析
2018/01/26 PHP
JS是否可以跨文件同时控制多个iframe页面的应用技巧
2007/12/16 Javascript
jquery的extend和fn.extend的使用说明
2011/01/09 Javascript
js中的异常处理try...catch使用介绍
2013/09/21 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
2014/01/10 Javascript
sso跨域写cookie的一段js脚本(推荐)
2016/05/25 Javascript
vue子父组件通信的实现代码
2017/07/09 Javascript
利用node.js如何创建子进程详解
2017/12/09 Javascript
vue-cli3.0 环境变量与模式配置方法
2018/11/08 Javascript
vue过滤器用法实例分析
2019/03/15 Javascript
微信小程序实现轨迹回放的示例代码
2019/12/13 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
[04:50]2019DOTA2高校联赛秋季赛四强集锦
2019/12/27 DOTA
python实现的多线程端口扫描功能示例
2017/01/21 Python
python3中bytes和string之间的互相转换
2017/02/09 Python
Python3学习笔记之列表方法示例详解
2017/10/06 Python
Python中的函数作用域
2018/05/07 Python
python实现根据给定坐标点生成多边形mask的例子
2020/02/18 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
解决margin 外边距合并问题
2019/07/03 HTML / CSS
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
加大码胸罩、内裤和服装:Just My Size
2019/03/21 全球购物
自荐信怎么写呢?
2013/12/09 职场文书
宿舍违规检讨书
2014/01/12 职场文书
2016年机关单位节能宣传周活动总结
2016/04/05 职场文书
感恩信:写给爸爸妈妈的一封感谢信
2019/09/12 职场文书
python本地文件服务器实例教程
2021/05/02 Python
Java框架入门之简单介绍SpringBoot框架
2021/06/18 Java/Android
Java详细解析==和equals的区别
2022/04/07 Java/Android