Angular在未连接到路由的控制器中访问$ routeParams

时间:2014-02-07 20:22:06

标签: angularjs

我有一个SPA Angular应用程序,它有两个主要的html div。其中一个经常变化,另一个经常变化。经常更改的一个在app.config中使用$ route。更改频率较低的div也需要知道网址更改,因此我想听取$routeParamas中的更改并做相应的操作。

所以在我的控制器里我有:

 .controller('SecondaryCtrl', function ($scope, $routeParams, MyService) {

     $scope.$watch('routeParams', function () {
         console.log('routeParams: ', $routeParams);
         // I need $routeParams.projectId to compose an API call. 
     });

     ...

 });

在控制台中,$routeParams作为空对象返回。我知道如果在app.config中定义了Controller和路由,$routeParams可用,但app.config已经定义了链接到PrimaryCtrl的给定路由:

.config( function ($interpolateProvider, $routeProvider) {
   $routeProvider
    .when('/project/:projectId', {
        templateUrl : 'partials/_project_detail.html',
        controller: 'PrimaryCtrl',
        resolve: {
            project: function ($route, MyService) {
                return MyService.get('projects/', $route.current.params.projectId);
            },
        }
    })

那么,当$routeParams更改时,如何才能访问SecondaryCtrl中的$routeParams

1 个答案:

答案 0 :(得分:1)

您可以在观看$routeChangeSuccess内收听$routeParams事件,如下所示:

.controller('SecondaryCtrl', function ($scope, MyService) {

     $scope.$on('$routeChangeSuccess', function (event, current, previous) {
         // current is the current route
         // previous is the previous route
     });

     ...

 });

Angular Doc