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:

1 <div ng-app="app" ng-controller="parentCtr">
2     <div ng-controller="childCtr1">name :
3         <input ng-model="name" type="text" ng-change="change(name);" />
4     </div>
5     <div ng-controller="childCtr2">Ctr1 name:
6         <input ng-model="ctr1Name" />
7     </div>
8 </div>

Controller:

 1 angular.module("app", []).controller("parentCtr",
 2 function ($scope) {
 3     $scope.$on("Ctr1NameChange",
 4
 5     function (event, msg) {
 6         console.log("parent", msg);
 7         $scope.$broadcast("Ctr1NameChangeFromParrent", msg);
 8     });
 9 }).controller("childCtr1", function ($scope) {
10     $scope.change = function (name) {
11         console.log("childCtr1", name);
12         $scope.$emit("Ctr1NameChange", name);
13     };
14 }).controller("childCtr2", function ($scope) {
15     $scope.$on("Ctr1NameChangeFromParrent",
16
17     function (event, msg) {
18         console.log("childCtr2", msg);
19         $scope.ctr1Name = msg;
20     });
21 });

      这里childCtr1的name改变会以冒泡传递给父controller,而父controller会对事件包装在广播给所有子controller,而childCtr2则注册了change事件,并改变自己。注意父controller在广播时候一定要改变事件name。

jsfiddle链接:http://jsfiddle.net/whitewolf/5JBA7/15/

 

作者:破  狼 
出处:http://www.cnblogs.com/whitewolf/ 
本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。该文章也同时发布在我的独立博客中-个人独立博客博客园--破狼51CTO--破狼。http://www.cnblogs.com/whitewolf/archive/2013/04/16/3024843.html

时间: 2024-12-24 04:59:19

Angularjs Controller 间通信机制的相关文章

Angularjs的Controller间通信机制实例分析_AngularJS

本文实例讲述了Angularjs的Controller间通信机制.分享给大家供大家参考,具体如下: 在Angularjs开发一些经验总结中提到我们需要按照业务区分angular controller,避免过大无所不能的上帝controller,我们把controller分离开了,但是有时候我们需要在controller中通信,一般为比较简单的通信机制,告诉同伴controller我的某个你所关心的东西改变了,怎么办?如果你是一个javascript程序员你会很自然的想到异步回调响应式通信-事件机

深入理解Android组件间通信机制对面向对象特性的影响详解_Android

组件的特点对于Android的四大组件Activity, Service, ContentProvider和Service,不能有Setter和Getter,也不能给组件添加接口.原因是组件都是给系统框架调用的,开发者只能实现其规定的回调接口,组件的创建与销毁都是由系统框架控制的,开发者不能强行干预,更没有办法获取组件的对象.比如Activity,Service,BroadcastReceiver,你没有办法去创建一个Activity,Service或BroadcastReceiver,然后像使

详解AngularJS的通信机制

  这篇文章主要介绍了AngularJS的通信机制,AngularJS是非常具有人气的JavaScript库,需要的朋友可以参考下 现在几乎满世界的人都在问! 外面有人么? 这里是 USS AngularJS, 我们遇到麻烦了,我们的服务讲得是克灵贡语(Klingon) 而我们的控制器不能同它们的Ferengi 指令通信了. 有人能帮助我们么! 我已经不知道有多少次遇到这种有关什么才是AngularJS里面的组件通信的最佳方式这样的问题了. 很多时候答案都会是为此使用 $rootScope 对象

angularjs下$broadcast $emit $on 事件触发controller间的值传递

使用angularjs,发现controller间的值传递,比较麻烦的,以后几篇文章会陆续说几种方法. 一,angularjs $broadcast $emit $on的处理思想 在一个controller里面通过事件触发一个方法,在方法里面通过$broadcast或$emit来定义一个变量,在父,子controller里面通过$on来获取. 二,实例说明angularjs $broadcast $emit $on的用法 1,html代码    代码如下 复制代码 <div ng-control

angularjs $broadcast $emit $on 事件触发controller间的值传递

用AngularJS,发现controller间的值传递,比较麻烦的,以后几篇文章会陆续说几种方法. 一,angularjs $broadcast $emit $on的处理思想 在一个controller里面通过事件触发一个方法,在方法里面通过$broadcast或$emit来定义一个变量,在父,子controller里面通过$on来获取.   二,实例说明angularjs $broadcast $emit $on的用法1,html代码 Java代码   <div ng-controller=

三家电信运营商建立玉树地震网间通信应急机制

4月14日晚间消息,为了让灾区通信尽快顺畅起来,中国电信青海公司主动与青海移动.青海联通联系,建立玉树地震网间应急机制.并充分发挥网络资源相对丰富的优势,全力保证两家运营商网络资源共享需求,共同为抗震救灾最大限度地提供通信支撑.

三大运营商建立玉树地震网间通信应急机制

4月14日晚间消息,为了让灾区通信尽快顺畅起来,三家电信运营商建立玉树地震网间通信应急机制. 据悉,中国电信青海公司主动与青海移动.青海联通联系,建立玉树地震网间应急机制.并充分发挥网络资源相对丰富的优势,全力保证两家运营商网络资源共享需求,共同为抗震救灾最大限度地提供通信支撑.(康钊)

什么是.Net的异步机制(线程间通信)

前几篇文章我已经对异步的操作进行的详细的解释.异步操作也是线程的一种,当我们开始一个异步操作(新线程),完成调用后需要和其他线程通信(可能需要告知状态信息),这时候我们就需要线程间的通信编程. 线程间通信 我们看下面的图 图1 我们来看线程间通信的原理:线程(Thread B)和线程(Thread A)通信, 首先线程A 必须实现同步上下文对象(Synchronization Context), 线程B通过调用线程A的同步上下文对象来访问线程A,所有实现都是在同步上下文中完成的.线程B有两种方式

Linux下C编程:网络编程之通信机制和体系结构模式

提到Linux 操作系统,就不能不提到网络技术.Linux 系统本身就是一个网络的产物,它在网络上可以供人们自由下载,并得到修改和完善..Linux 系统支持多种网络协议,它的shell 还提供了强大的联网命令.这些优点使得Linux 为许多中小型的网络应用提供了完全的解决方案. 提到计算机网络,就不得不先介绍一下它的通信机制和体系结构模式. 1.通信模式 所有的网络通信的实现方式可以分为两种:线路交换和包交换. 所谓线路交换,就是指传输时在发送端和接收端之间建立一个特定的线路连接,数据就可以在