Angularjs Controller间通信的几种方法

先说最简单的,适合简单数据

一、使用controller as

<body ng-controller="ParentCtrl as parent">
    <input ng-model="parent.name" /> {{parent.name}}
    <div ng-controller="ChildCtrl as child">
      <input ng-model="child.name" /> {{child.name}} - {{parent.name}}
    </div>
</body>

这样parentCtrl中的数据也可以显示在嵌套在其中的childCtrl了

二、使用$rootScope 或 $parent

<body ng-controller="ParentCtrl">
    <input ng-model="name" /> {{name}}
    <div ng-controller="ChildCtrl">
        <input ng-model="name" /> {{name}} - {{$parent.name}}
    </div>
</body>

三、使用$broadcast,$emit和$on

  • 从上往下—— $broadcast 把事件广播给所有子controller
  • 从下往上—— $emit 将事件冒泡传递给父controller
  • $on     ——  angularjs的事件注册函数
<div ng-app="app" ng-controller="parentCtrl">
    <div ng-controller="childCtrl1">name :
        <input ng-model="name" type="text" ng-change="change(name);" />
    </div>
    <div ng-controller="childCtrl2">Ctr1 name:
        <input ng-model="ctrl1Name" />
    </div>
</div>
angular.module("app", []).controller("parentCtrl",function ($scope) {
    //注册Ctrl1NameChange事件
    $scope.$on("Ctrl1NameChange", function (event, msg) {
        console.log("parent", msg);
        $scope.$broadcast("Ctrl1NameChangeFromParent", msg);
    });
}).controller("childCtrl1", function ($scope) {
    $scope.change = function (name) {
        console.log("childCtrl1", name);
//冒泡Ctrl1NameChange事件,将name传给父级controller $scope.$emit(
"Ctrl1NameChange", name); }; }).controller("childCtrl2", function ($scope) { // $scope.$on("Ctrl1NameChangeFromParent",function (event, msg) { console.log("childCtrl2", msg); $scope.ctrl1Name = msg; }); });

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

参看:

  • http://www.cnblogs.com/whitewolf/archive/2013/04/16/3024843.html
  • http://stackoverflow.com/questions/21287794/angularjs-controller-as-syntax-clarification

转载于:https://www.cnblogs.com/JoannaQ/p/5053680.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值