AngularJS - 如何覆盖$ urlRouterProvider.when

时间:2016-05-25 09:36:22

标签: javascript angularjs angular-ui-router

在我的AngularJS应用程序中,我有多个route.js文件控制着我的所有路由。

默认情况下,我的路线"/"等于"/main",但是有办法稍后覆盖吗?

假设我有一个像这样的route.js:

angular.module('myApp')
.config(function ($stateProvider, $urlRouterProvider) {
    $urlRouterProvider.when('/','/main');

    $stateProvider
        .state('main', {
            url: "/main",
            templateUrl: 'main.html',
            controller: 'mainController'
        });
});


但后来我想动态覆盖这个默认路由,使用来自route2.js的新路由

angular.module('myApp')
.config(function ($stateProvider, $urlRouterProvider) {
    $urlRouterProvider.when('/','/newMain');

    $stateProvider
        .state('newMain', {
            url: "/newMain",
            templateUrl: 'newMain.html',
            controller: 'newMainController'
        });
});

1 个答案:

答案 0 :(得分:1)

.when设置不仅可以提供常量,甚至可以是函数。

所以,让我们设置一些(例如天真的全球var useDifferent = false;并做出决定:

$urlRouterProvider.when("/other", function(){
    if(useDifferent){
      return  "/newMain";
    }
    return "/Main";
});

稍后,任何人都可以更改该设置useDifferent = true (或者更多,更智能和更正确的处理......)