ui路由没有urlRouterProvider.otherwise

时间:2015-12-09 23:36:55

标签: angularjs go routing angular-ui-router gorilla

如果我不包含$ urlRouterProvider.otherwise('/'),则不会发生路由;在配置中。

我的应用程序引擎设置与大猩猩是

r := mux.NewRouter()
r.HandleFunc(/admin, handleAdmin)

和angularjs config是;

angular.module('admin')
    .config(function($stateProvider, $urlRouterProvider) {
      $stateProvider.state('home', {
        url: '/',
        templateUrl: '/admin/index.html',
        controller: 'AdminController as admin'
      });
  //$urlRouterProvider.otherwise('/');
})

当我不调用$ urlRouterProvider.othwerwise行时,我打开http://localhost:8080/admin我希望看到admin / index.html,但我没有。只有当我手动导航到http://localhost:8080/admin#/时才会看到它。 但是,如果我添加$ urlRouterProvider.othwerwise选项并转到http://localhost:8080/admin,它会自动重定向到http://localhost:8080/admin#/ 我不认为这是通常的做法,因为我可能希望“否则”路由到自定义404页面。我错过了什么点?

2 个答案:

答案 0 :(得分:0)

默认情况下,Angular会在网址前添加 hashPrefix 。因此,当您导航到http://localhost:8080/admin时,您还没有看到index.html,因为您还没有访问过角度路由器中定义的网址。您必须导航到http://localhost:8080/admin/#/以确保处于应用程序的/状态。

这与您的应用在没有.otherwise()的情况下无法正常工作的原因相同,因为之后它会自动将您重定向到/状态。

可能的解决方法:

.config功能中:

// This is in your app module config.
$locationProvider.html5Mode(true);

在您的index.html

// This is in your index.html head.
<base href="/" />

答案 1 :(得分:0)

问题不在于没有声明otherwise

问题出在您的路线上。您已将网址指定为'/',这意味着状态主页只能通过 http://localhost:8080/admin/ 访问,而不能通过访问http://localhost:8080/admin

otherwise的作用是什么。当您访问网址 http://localhost:8080/admin 时,路由器会尝试查找与该网址匹配的状态,但无法找到该网址。因此,它会重定向到与您的主页状态匹配的 http://localhost:8080/admin/