Angular2路由无哈希,即使使用HashLocationStrategy

时间:2016-03-31 15:45:32

标签: angular2-routing

这是Angular 2.0 router not working on reloading the browser的后续行动 即使我配置路由器使用HashLocationStrategy我仍然得到没有#的url路径。我完全遵循Angular2文档https://angular.io/docs/ts/latest/tutorial/toh-pt5.html 并按照https://angular.io/docs/ts/latest/guide/router.html

所述设置位置策略

我的引导程序:

import {bootstrap}    from 'angular2/platform/browser';
import {provide} from 'angular2/core';
import {
    ROUTER_PROVIDERS,
    LocationStrategy,
    HashLocationStrategy
} from 'angular2/router';

import {AppComponent} from './app.component';

bootstrap(AppComponent, [
    ROUTER_PROVIDERS,
    provide(LocationStrategy, { useClass: HashLocationStrategy })
]);

路由器配置:

@RouteConfig([
    {
        path: '/detail/:id',
        name: 'HeroDetail',
        component: HeroDetailComponent
    },
    {
        path: '/heroes',
        name: 'Heroes',
        component: HeroesComponent
    },
    {
        path: '/dashboard',
        name: 'Dashboard',
        component: DashboardComponent,
        useAsDefault: true
    }
])

我希望在浏览器中看到http://localhost/#/dashboard这样的网址,但我得到http://localhost/dashboard。 我错过了什么?

4 个答案:

答案 0 :(得分:1)

尝试移动ROUTER_PROVIDER并在app.component.ts文件中提供(..) - stuff。

在那里你应该把它粘贴到@ Component.providers-Array。

有关更详细的回答,看看这篇文章,它解决了我的问题,这似乎与你的关系: https://stackoverflow.com/a/35879541/4977476

答案 1 :(得分:0)

我的理解(可能是错误的,我刚开始使用Angular2)是useAsDefault充当重定向。但是在使用散列位置时不需要这样做,因为从服务器的角度来看,无论如何所有页面都在'/'上。

答案 2 :(得分:0)

问题似乎是,必须在提供者数组中定义LocationStrategy,正如SilverJan和KochFolie所指出的那样。见HashLocationStrategy not working as expected

答案 3 :(得分:0)

它对我有用:

...

import { RouterModule, Routes } from '@angular/router';

import {
  APP_BASE_HREF,
  LocationStrategy,
  HashLocationStrategy
} from '@angular/common';


...

const appRoutes: Routes = [
  { path: '', loadChildren: './user-profile/user-profile.module#UserProfileModule'},
  ...
];

@NgModule({
 ...
  providers: [ { provide: APP_BASE_HREF, useValue: "/core/user" }, {provide: LocationStrategy, useClass: HashLocationStrategy}],
  bootstrap: [AppComponent]
})
export class AppModule { }