当我转到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);

答案 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