4

我有一个角度页面,它有一个 ng-controller 指令和一个 ng-view 指令。

<body ng-controller="MainController">
   <h1>Welcome to my main template</h1
   <ng-view></ng-view>
</body>

我也配置了路线。

angular.module('app', []).
    config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
        $routeProvider.
            when('/', {templateUrl: '/templates/home.html', controller: HomeController}).
            when('/start', {templateUrl: '/templates/start.html', controller: StartController});

        $locationProvider.html5Mode(true);
}]);

例如,当我单击将我路由到 /start 的 URL 时,只有 StartController 运行,而不是 MainController。我想这种方法是有道理的,因为主布局已经加载,然后模板现在只需要加载,但我的 MainController 中有控制我需要运行的部分模板视图的逻辑。

但是,如果我刷新整个页面,两个控制器都会运行。

有没有办法让两个控制器都运行?这是错误的模式吗?

4

2 回答 2

4

在您的主控制器上监听以$routeChangeSuccess在路由更改时获得通知。

app.controller('MainController', function($scope) {
  $scope.$on('$routeChangeSuccess', function(event, current, previous, rejection) {
    if (current == 'someRoute') {
      //execute some route logic
    }
  });

})
于 2013-10-02T05:29:34.640 回答
4

将 MainController 中的逻辑移动到服务中,这取决于各个视图控制器中的该服务。然后从视图控制器调用服务以执行您的逻辑。

于 2013-10-02T02:05:52.530 回答