$ urlRouterProvider.otherwise不会转到默认路由

时间:2018-04-28 11:11:07

标签: angularjs angular-ui-router

我坚持了一段时间。我对ui-router的视图嵌套非常新。我正在尝试在“/”访问时路由到默认值。这是我的js文件:

angular
        .module("app")
        .config(function($stateProvider,$locationProvider,$urlRouterProvider){

            $urlRouterProvider.otherwise("dashboard");

            $stateProvider
                    .state("home",{
                        url: "/",
                        templateUrl: "views/home/home.html"
                    })

                    .state("login",{
                        url: "/login",
                        templateUrl: "views/login/login.html"
                    })

                    .state("home.dashboard",{
                        url: "/dashboard",
                        templateUrl: "views/home/dashboard.html"
                    });       
             $locationProvider.html5Mode(true);
});



我不知道为什么那不起作用。每次我尝试加载localhost时,都不会localhost/dashboard。相反,它会停止加载直到home.html。请帮助我学习新的东西并表明我的错误。

1 个答案:

答案 0 :(得分:0)

请参阅此working plunker。我关闭了HTML5模式,因为它阻止了plunker正常工作。

您的代码的主要问题是您在此声明中重定向到/dashboard

$urlRouterProvider.otherwise("/dashboard");

请注意,home.dashboardhome的子状态。因此,默认情况下,URL应以home状态的URL开头。所以正确的陈述是:

$urlRouterProvider.otherwise("/home/dashboard");

如果您不想要上述/home,则需要将home.dashboard州的路线配置更改为:

.state("home.dashboard", {
  url: "^/dashboard",
  templateUrl: "dashboard.html"
});

前面的^使URL绝对,并使其不受任何前面的父状态URL的影响。现在,语句$urlRouterProvider.otherwise("/dashboard");将按原样运行。

完成此更改后,代码可以在视图中加载模板home.html。此外,您在ui-view中没有任何home.html指令可以加载home.dashboard的模板。因此,我在<div ui-view></div>中添加了home.html元素,以使其正常运行。