【问题标题】:How to make controller in angular main layout run on route change?如何使角度主布局中的控制器在路线更改时运行?
【发布时间】:2013-10-02 01:27:49
【问题描述】:

我有一个有 ng-controller 指令和 ng-view 指令的 Angular 页面。

<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 中有控制我需要运行的部分模板视图的逻辑。

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

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

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    在主控制器上监听$routeChangeSuccess,以便在路由更改时收到通知。

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

    【讨论】:

    • 使用这个时,我不得不使用 if (current.$$route.originalPath === 'someRoute')
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 2016-06-07
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多