我有三个非常基本的组件:AppComponent
,AdminComponent
和LoginComponent
。 AppComponent
和LoginComponent
都显示指向AdminComponent
的链接。 AppComponent
包含router-outlet
和所有路由配置。
现在由于某种原因,<a [routerLink]="['Admin']">Admin</a>
中的<a href="/admin">Admin</a>
角度呈现AppComponent
正如预期一样。但是,LoginComponent
中的完全相同的链接会呈现给<a>Admin</a>
。我做错了什么?
Angular版本尝试过:2.0.0-beta.8和2.0.0-beta.9。
app.component.ts
import {Component} from 'angular2/core';
import {RouteConfig, ROUTER_DIRECTIVES} from 'angular2/router';
import {AdminComponent} from './admin.component';
import {LoginComponent} from './login.component';
@Component({
selector: 'ww-app',
template: `
<a [routerLink]="['Admin']">Admin</a> // This link works as expected
<router-outlet></router-outlet>
`,
directives: [ROUTER_DIRECTIVES]
})
@RouteConfig([
{ path: '/login', component: LoginComponent, name: 'Login', useAsDefault: true },
{ path: '/admin', component: AdminComponent, name: 'Admin' }
])
export class AppComponent {
}
login.component.ts
import {Component} from 'angular2/core';
import {RouterLink} from 'angular2/router';
@Component({
selector: 'ww-login',
directives: [RouterLink],
template: `
<div>
<a [routerLink]="['Admin']">Admin</a> // Renders <a>Admin</a>
<div>login box </div>
</div>
`
})
export class LoginComponent {
}
呈现HTML输出
<ww-app>
<a href="/admin">Admin</a> <!-- link as expected (AppComponent)-->
<router-outlet></router-outlet>
<ww-login _ngcontent-nky-2="">
<div>
<a>Admin</a> <!-- href is missing here (LoginComponent)-->
<div>login box </div>
</div>
</ww-login>
</ww-app>
更新
好吧,我只是对Issue with routerLink directive的类似问题进行了解释。看起来像angular2-polyfill.js是坏孩子。请参阅我从index.html中删除polyfill的Thierry's modified plunkr。
跟进问题:
angular2-polyfill宣称自己为
Angular2的Angular2 polyfill
要问可能是愚蠢的,但我真的需要它吗?显然它为我解决了一个问题,但它给我带来了一种不好的感觉,因为这不是Angular 1.额外的弃用警告也无济于事......
答案 0 :(得分:2)
我认为您的问题是您将指令设置为[RouterLink]
而不是[ROUTER_DIRECTIVES]
。
如果您看到代码,则RouterLink指令适用于与<a>
不同的其他标记。与<a>
标记一起使用的路由器链接指令是RouterLinkWithHref。
@Directive({selector: ':not(a)[routerLink]'})
export class RouterLink { ... }
@Directive({selector: 'a[routerLink]'})
export class RouterLinkWithHref implements OnChanges, OnDestroy { ... }