我想知道我是否可以在$rootScope.$emit
函数内调用$rootScope.$on
,原因是我有两个控制器ctrl1.js
和`ctrl2.js,
我想在我的ctrl1.js
我一分钟前对angularjs很新,这是我的代码,谢谢你,
/* Ctrl1 */
$rootScope.$on("rootScopeDisplayPage", function(event,target){
$rootScope.$emit("CallAMethodFromCtrl2", target);
});
/* Ctrl2 */
$rootScope.$on("CallAMethodFromCtrl2", function(event, target){
$scope.displayArticle(target);
});
$scope.displayArticle = function(articleStatus){
/* do something */
}
它就像一个嵌套的$rootScope.$on
谢谢,
答案 0 :(得分:2)
$emit
用于将数据从子节点传递到父节点。 $rootScope
是所有元素的父范围,因此使用$emit
没有意义。即使您使用它,也没有父元素可以捕获它。
相反,您可以使用$rootScope.$broadcast
事件在控制器之间共享内容。
有关详细信息,请参阅$broadcast和$emit
angular
.module("app", [])
.controller("Controller1", function($scope, $rootScope, $timeout){
var add = function(a, b) {
return a + b;
}
$timeout(function(){
$rootScope.$broadcast("Add function", add);
}, 2000);
$scope.$on("Sub function", function(event, sub) {
$scope.sub = sub(1, 2);
});
})
.controller("Controller2", function($scope, $rootScope, $timeout){
var sub = function(a, b) {
return a - b;
}
$scope.$on("Add function", function(event, add) {
$scope.sum = add(3, 4);
$timeout(function(){
$rootScope.$broadcast("Sub function", sub);
}, 1000);
});
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
<div ng-controller="Controller1">
<span ng-show="!sub">Waiting for Sub function...</span>
<span ng-show="sub">1 - 2 = {{ sub }}</span><br />
</div>
<div ng-controller="Controller2">
<span ng-show="sum">3 + 4 = {{ sum }}</span>
<span ng-show="!sum">Waiting for add function...</span><br />
</div>
</div>
答案 1 :(得分:2)