Access routeProvider's route properties

2019-03-15 18:17发布

For a route defined like this:

$routeProvider
.when('/',
{
    templateUrl:'views/login.html',
    controller:'Login',
    private:false
});

How can I access the private property inside a $routeChangeStart event for example? Currently I'm using current.$$route.private to get it, but it seems wrong.

Thanks.

2条回答
兄弟一词,经得起流年.
2楼-- · 2019-03-15 18:40

$routeChangeStart happens prior to the route changing, so you need to look at next. There's no need to use next.$$route since next inherits from $$route.

angular.module('example', ['ngRoute'])
  .config(function($routeProvider) {
    $routeProvider.when('/',  {
      controller: 'MyCtrl',
      template:   '<b>isPrivate: {{isPrivate}}</b>',

      private: false
    });
  })

  .run(function($rootScope) {
    $rootScope.$on('$routeChangeStart', function(event, next, current) {
      /* 
       * this is fired prior to the route changing, so your params will be on
       * next.  Here we just attach it $rootScope as an example.
       * note that you don't need to use next.$$route since $$route is private,
       * and next inherits from next.$$route. */
       */
      $rootScope.isPrivate = next['private'];
    });
  })
  .controller('MyCtrl', function($scope) {

  })
查看更多
【Aperson】
3楼-- · 2019-03-15 18:56

It is actually recommended to put all your custom data with routes inside a "data" object as such.

$routeProvider
.when('/',
{
    templateUrl:'views/login.html',
    controller:'Login',
    data: {
       private: false
    }
});

Here is how I access route params

$rootScope.$on( "$routeChangeStart", function(event, next, current) {
   next.data.private;
});

The second parameter of the routeChangeStart event is the route object that is called. Another advantage is that anything in the data object is passed to children states.

查看更多
登录 后发表回答