Angular UI路由器与URL路径不匹配

时间:2014-10-16 20:45:36

标签: angularjs angular-ui-router

当我转到localhost:3000 / login时,我被重定向到localhost:3000 / login#/ login。这是怎么回事?如果重要的话,我正在使用AngularJS的1.3版本。



 (function() {
  this.app.config([
'$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {
  
$urlRouterProvider.otherwise('/login');

$stateProvider.state('register', {
    url: '/register',
    templateUrl: '/components/user/register.html',
    controller: 'UserCtrl'
  }).state('login', {
    url: '/login',
    templateUrl: '/assets/components/auth/login.html',
    controller: 'AuthCtrl'
  });
}
  ]);

}).call(this);




1 个答案:

答案 0 :(得分:1)

您看到localhost:3000/login#/login的原因是因为您的$ stateProvider配置使用.otherwise路由转到#/login。第一个/login是您的端点的URL路径的一部分,用于检索单页应用程序(SPA)的HTML - 它是您的基本URL的一部分。

对于首先使用SPA开发的开发人员来说,它可能看起来与直觉相反,导航"在应用程序中并没有实际更改URL路径 - 因此也没有更改服务器的端点。因此没有HTTP请求或HTTP-302重定向。应用程序(或Angular,在本例中)仅更改URL的片段(#)部分 - 即$ stateProvider或$ routeProvider" navigation"的工作原理。

因此,您在SPA中配置的路由确定"逻辑上"哪个视图显示。虽然视图的内容可以从外部URL加载,但它与" route"无关。定义本身。

确定您的SPA的居住地。确定哪些属于您的SPA以及什么不属于 - 并且将由不同的端点提供服务。在SPA中,"导航"通过#/path/to/view - 风格的路线。通过$location.path更改网址,以在SPA之外导航到其他端点。

==相同的端点/不同"路由" - 同一个应用程序的所有部分:

baseurl.com/basePath#/about
baseurl.com/basePath#/login
baseurl.com/basePath#/product/153

==不同的终端 - 不同的应用程序。每个都是对服务器的HTTP请求:

baseurl.com/basePath/about
baseurl.com/basePath/login
baseurl.com/basePath/product/153/

修改

结果可以使用/page-view/other/params而不是#。请查看以下SO question

简而言之,它被称为HTML5模式,可以使用$ locationProvider进行配置:

$locationProvider.html5Mode(true);

但是,这需要在服务器上进行更多配置和更多配置:https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-configure-your-server-to-work-with-html5mode