AngularJS中控制器之间通信方法
在同个angular应用的控制器之间进行通信可以有很多种不同的方式,本文主要讲两种: 和 基于scope继承的方式最简单的让控制器之间进行通信的方法是通过scope的继承。假设有两个控制器Parent、Child,Child 在 Parent 内,那Child 可以称为子控制器,它将继承父控制器Parent的scope。这样,Child就可以访问到Parent的scope中的所有函数和变量了。需要注意的是,由于scope的继承也是基于Js的原型继承,如果变量是基本类型的,那在Child中的修改(写),有可能会导致Parent中的数据变脏。 基本类型变量的继承 $scope.location = 'Mos Eisley North' $scope.move = $scope.location = $scope.sell = $scope.location =
Location: 看完上面的代码我们知道,
如果 Sandcrawler 中改变了 经过上面的教训,有时候我们想要达到的效果可能达不到(如点了 对象类型变量的继承通过上面的结论我们知道,可以用对象类型的变量来作为属性添加到 $scope 中去,这样,只要是引用了这个对象的,无论是谁,在哪个控制器里面,对这个对象变量的改写都会影响都所有引用了这个对象的实例。看下面的代码: $scope.sandcrawler.location = 'Mos Eisley North' $scope.summon = $scope.sandcrawler.location =
Sandcrawler Location: 跑一下上面的代码就知道,当我们使用“召唤术”的时候,可以改写 Sandcrawler 控制下的 p 标签的显示了。 基于event传播的方式基于scope继承的方式只能处理父子级控制器之间的通信问题,不能处理兄弟/相邻控制器之间的通信问题。这时候,我们需要使用基于event传播的方式来进行通信,这里,ng为我们提供了三个方法: 子-->父:$emit整个过程是这样的:
子scope中的控制器通过 父-->子:$broadcast从父到子,用另外一个方法就是了,同样用
= 'Mos Eisley North'= 'recall'
= 'Owen Farm''recall',newLocation) {
$scope.location =
Sandcrawler Location:
Droid Location:
同级之间拥有同个父scope的子级scope之间,也就是兄弟/相邻scope之间的通信,其实是借助“奶爸”传递消息的:
子级scope中有谁想传消息了,
$scope.$on('requestDroidRecall', $scope.$broadcast('executeDroidRecall'
$scope.location = 'Owen Farm' $scope.recallAllDroids = $scope.$emit('requestDroidRecall' $scope.$on('executeDroidRecall', $scope.location = 'Sandcrawler'
R2-D2Droid Location: C-3PODroid Location: 上面代码中要注意的是:子scope通过 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |