好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Angularjs Controller 间通信机制

Angularjs Controller 间通信机制

Angularjs Controller 间通信机制

2013-04-16 20:54 by 破狼, 72 阅读,  0  评论,  收藏 ,  编辑

       在 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--破狼 。

 

分类:  AngularJs ,  JavaScript

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于Angularjs Controller 间通信机制的详细内容...

  阅读:43次