angular.js使用路由时,子控制器监听不到父级$boardcast的事件

环境:angular.js+sastruts+apache-tomcat

angular.js中当使用路由时,控制器之间通信使用$on,$emit,$boardcast方式实现时,子控制器监听不到父级$boardcast的事件!存在的问题,求解!!并提供的一个解决方法。

如下code, test01Controller控制器中的的变量可以$emit到父控制器(mainController)中,父控制器也可以$on监听到事件,但是,父控制器中$boardcast事件时,子控制器却不可以$on监听到事件。

controller.js
angular.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


初学求解。

以上。


你可能感兴趣的:(控制器,路由,angular.js)