环境:angular.js+sastruts+apache-tomcat
angular.js中当使用路由时,控制器之间通信使用$on,$emit,$boardcast方式实现时,子控制器监听不到父级$boardcast的事件!存在的问题,求解!!并提供的一个解决方法。
如下code, test01Controller控制器中的的变量可以$emit到父控制器(mainController)中,父控制器也可以$on监听到事件,但是,父控制器中$boardcast事件时,子控制器却不可以$on监听到事件。
controller.jsangular.module('mainApp', ['ngRoute']).config([ '$routeProvider',
function($routeProvider) {
$routeProvider.when('/test01', {
templateUrl : 'test01.html',
controller: 'test01Controller'
}).when('/test01Result', {
templateUrl : 'test01Result.html',
controller: 'test01ResultController'
}).otherwise({
redirectTo : '/grid'
});
} ]);
html
<!DOCTYPE html>
<html>
<head>
...
</head>
<body ng-app="mainApp" ng-controller="mainController">
<div ng-view></div>
</body>
</html>
目前的一个解决方案是使用$on,$emit,$boardcast方式和作用域的继承方式相结合的方式实现,没有通过$rootScope实现。
test01Controller.js
// 控制器间值传递案①
$scope.$emit("test01Result", obj.resultJson);
$window.location.href = "#/test01Result";
test01ResultController.js
// 控制器间值传递案①
//alert($scope.test01Result);
$scope.test01VForm = angular.fromJson($scope.test01Result);
mainController.js
$scope.$on("test01Result", function(e, obj) {
$scope.test01Result = obj;
});
即,子控制器将变量$emit到父控制器中,父控制器$on监听到事件后,将此变量赋值给父$scope一个的变量中,这个父$scope变量可以在其子控制器得到该值。
讨论帖:http://www.oschina.net/question/1050450_174578
初学求解。
以上。