我们已经升级了我们的角2项目,以发布候选4。
我们使用HashLocationStrategy在浏览器中刷新页面(使用BrowserSync)。但是对于RC4来说,这已经行不通了。没有组件被加载到路由器出口。但是,使用菜单项的路由链接确实有效。
HashLocationStrategy for RC4是坏了,还是我们没有正确地使用它?我们还没有在互联网上找到任何信息。(现在,我们只是试图通过Angular2源代码来了解到底发生了什么)
更新:这是代码。
而且,我们似乎无法找到一种方法来使默认路径正常工作。尝试了如下所示的空路径,尝试redirect...nothing似乎触发了一个默认路由,该路由将将组件加载到路由出口。
// boot:
import {bootstrap} from '@angular/platform-browser-dynamic';
import {AppComponent} from './app.component';
bootstrap(AppComponent)
.catch(err => console.log(err));
// AppComponent:
import {Component, provide, ExceptionHandler} from '@angular/core';
import {HTTP_PROVIDERS, XHRBackend} from '@angular/http';
import {CORE_DIRECTIVES, LocationStrategy, HashLocationStrategy} from '@angular/common';
import {TranslatePipe, TranslateService, TRANSLATE_PROVIDERS} from 'ng2-translate/ng2-translate';
import {SideMenuComponent} from './navigatie/index';
import {AppSettingsService, Auth, MockBackendToggle} from './shared/index';
import {EssStorage} from './shared/ess-storage';
import {EssHttp} from './shared/ess-http';
import {DienstverbandService} from './dienstverband/shared/dienstverband.service';
import {HeaderMenuComponent} from './navigatie/headermenu/headermenu.component';
import {WerknemerService} from './werknemer/werknemer.service';
import {PersoonService} from './werknemer/persoon/shared/persoon.service';
import {RouterOutlet} from '@angular/router';
import {APP_ROUTER_PROVIDER} from './navigatie/routes';
import {AuthGuard} from './shared/auth/auth-guard';
import {EssExceptionHandler} from './shared/ess-exception-handler';
@Component({
selector: 'ess-app',
pipes: [TranslatePipe],
directives: [CORE_DIRECTIVES, SideMenuComponent, HeaderMenuComponent, RouterOutlet],
providers: [TRANSLATE_PROVIDERS, TranslateService, HTTP_PROVIDERS, EssHttp, WerknemerService, APP_ROUTER_PROVIDER, AuthGuard,
AppSettingsService, Auth, DienstverbandService, PersoonService, provide(XHRBackend, {useClass: MockBackendToggle}),
provide(LocationStrategy, {useClass: HashLocationStrategy}), provide(ExceptionHandler, {useClass: EssExceptionHandler})],
template: `
<div id='main'>
<div class='header hidden-xs' *ngIf="_auth !== undefined && _auth.isLoggedIn()">
<header>
<ess-headermenu></ess-headermenu>
</header>
</div>
<div class='ess-sidemenu-container visible-lg' *ngIf="_auth !== undefined && _auth.isLoggedIn()">
<ess-sidemenu></ess-sidemenu>
</div>
<div class='main-content-container col-lg-12'>
<section>
<section id='content'>
<div>
<router-outlet></router-outlet>
</div>
</section>
</section>
</div>
</div>`
})
export class AppComponent { //..}
// routes:
import {provideRouter, RouterConfig} from '@angular/router';
import {DashboardComponent} from '../dashboard/index';
import {PersonaliaComponent} from '../werknemer/index';
import {LoginComponent} from '../login/index';
import {AuthGuard} from '../shared/auth/auth-guard';
export const appRoutes: RouterConfig = [
{path: '', component: LoginComponent},
{path: 'login/:url', component: LoginComponent},
{path: 'dashboard', component: DashboardComponent},
{path: 'personalia', component: PersonaliaComponent, canActivate: [AuthGuard]}
];
export const APP_ROUTER_PROVIDER = provideRouter(appRoutes);更新:
当我通过单击链接并使用routerLink导航到视图时,路由器出口将被填充正确的组件。例如,当导航到“auto”时。
<li class="submenuitem" [routerLink]="['auto']"><a href="#"><span>{{'AUTO' | translate}}</span></a></li>但是当我刷新“自动”页面时,路由器出口就变成空了。
发布于 2016-07-14 10:09:17
在角2 rc4中,LocationStrategy似乎已经从路由器移动到普通路由器。你得从那里进口。
还请注意“provide”行周围的花括号。
rc4: main.ts
// Imports for loading & configuring the in-memory web api
import { XHRBackend } from '@angular/http';
// The usual bootstrapping imports
import { bootstrap } from '@angular/platform-browser-dynamic';
import { HTTP_PROVIDERS } from '@angular/http';
import { AppComponent } from './app.component';
import { APP_ROUTER_PROVIDERS } from './app.routes';
import { Location, LocationStrategy, HashLocationStrategy} from '@angular/common';
bootstrap(AppComponent, [
APP_ROUTER_PROVIDERS,
HTTP_PROVIDERS,
{provide: LocationStrategy, useClass: HashLocationStrategy}
]);rc5: app.module.ts
在rc.5中,由于对main.ts的重大更改,这再次发生变化。在导入app.module.ts时,哈希定位策略现在作为一个选项在RouterModule中实现。
@NgModule({
imports: [routing, RouterModule.forRoot(routing,{ useHash: true })],2.0.0: app.module.ts
在角2.0.0 (= release )中,Hashlocationstrategy保留在app.module.ts中,但措辞略有改变。它现在和提供者坐在一起。
...
import { LocationStrategy, HashLocationStrategy } from '@angular/common';
...
@NgModule({
bootstrap: [AppComponent],
imports: [
//all your modules
],
declarations: [
//all your components
],
providers: [
//all your services
{provide: LocationStrategy, useClass: HashLocationStrategy},
]
})https://stackoverflow.com/questions/38265536
复制相似问题