zoukankan      html  css  js  c++  java
  • Angularjs Controller 间通信机制

    Angularjs Controller 间通信机制

    转自:http://www.cnblogs.com/whitewolf/archive/2013/04/16/3024843.html

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

  • 相关阅读:
    2. Add Two Numbers
    1. Two Sum
    leetcode 213. 打家劫舍 II JAVA
    leetcode 48. 旋转图像 java
    leetcode 45. 跳跃游戏 II JAVA
    leetcode 42. 接雨水 JAVA
    40. 组合总和 II leetcode JAVA
    24. 两两交换链表中的节点 leetcode
    1002. 查找常用字符 leecode
    leetcode 23. 合并K个排序链表 JAVA
  • 原文地址:https://www.cnblogs.com/1995hxt/p/5116591.html
Copyright © 2011-2022 走看看