angular中控制器之间的传值该怎么实现

 我来答
qiaole123
2016-09-06 · TA获得超过3413个赞
知道大有可为答主
回答量:1408
采纳率:66%
帮助的人:966万
展开全部

Angularjs控制器之间传值有以下几种方式:

  1. $emit只能向parent controller传递event与data( $emit(name, args) )

  2. $broadcast只能向child controller传递event与data( $broadcast(name, args) )

  3. $on用于接收event与data( $on(name, listener) )

<div ng-controller="ParentCtrl">              <!--父级-->
  <div ng-controller="SelfCtrl">              <!--自己-->
    <a ng-click="click()">click me</a>
    <div ng-controller="ChildCtrl"></div>     <!--子级-->
  </div>
  <div ng-controller="BroCtrl"></div>         <!--平级-->
</div>

var app = angular.module('myApp', []);
app.controller('SelfCtrl', function($scope) {
  $scope.click = function () {
    $scope.$broadcast('to-child', 'child');
    $scope.$emit('to-parent', 'parent');
  }
});
 
app.controller('ParentCtrl', function($scope) {
  $scope.$on('to-parent', function(event,data) {
    console.log('ParentCtrl', data);       //父级能得到值
  });
  $scope.$on('to-child', function(event,data) {
    console.log('ParentCtrl', data);       //子级得不到值
  });
});
 
app.controller('ChildCtrl', function($scope){
  $scope.$on('to-child', function(event,data) {
    console.log('ChildCtrl', data);      //子级能得到值
  });
  $scope.$on('to-parent', function(event,data) {
    console.log('ChildCtrl', data);      //父级得不到值
  });
});
 
app.controller('BroCtrl', function($scope){
  $scope.$on('to-parent', function(event,data) {
    console.log('BroCtrl', data);         //平级得不到值
  });
  $scope.$on('to-child', function(event,data) {
    console.log('BroCtrl', data);         //平级得不到值
  });
});
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式