【发布时间】:2016-02-11 14:26:53
【问题描述】:
我有一个 header.component.ts,它应该在用户登录后填充用户名。我希望能够从 mainMenuComponent 调用 header.component 类的函数/方法。
这是在 angular2 的上下文中。所以当我路由到我的 mainmenu.component 时,它应该调用 header.component 来设置用户名。
这是我的布局:
app.component:
@Component({
selector: 'myapp',
template:`<header userName="{{userName}}"></header>
<router-outlet></router-outlet>`,
directives: [ROUTER_DIRECTIVES, HeaderComponent]
})
@RouteConfig([
{path:'/', name:'Login', component: LoginComponent, useAsDefault: true},
{path:'/mainmenu', name:'MainMenu', component: MainMenuComponent},])
header.component:
@Component({
selector: 'header',
templateUrl: 'header.html'
})
export class HeaderComponent {
@Input() userName;
updateHeaderUserName(userName:string) {
this.userName = userName;
}
}
login.component:
onSubmit() {
this._router.navigate( ['MainMenu', {userName: 'John Doe'}] );
}
主菜单组件:
export class MainMenuComponent implements OnInit {
constructor(
private _routeParams:RouteParams){}
ngOnInit() {
// CAN I CALL THIS FUNCTION OFF THE HEADER.COMPONENT HERE???
updateHeaderUserName(this._routeParams.get('userName'));
}
}
从代码中可以看出,我已经尝试使用路由参数的解决方案,但我可以在路由时传递我想要的所有用户名以促进路由组件通信,但不清楚 HeaderComponent 是否在内存中我如何调用它有什么公共功能?
【问题讨论】:
-
我认为
header & main components之间没有关系,否则您可以使用EventEmitter调用updateHeaderUserName方法。现在,据我所知,我认为您应该考虑在 Angular2 中使用service更具体的shared service among components。 -
我实际上尝试了 EventEmitter 但它没有用,我想知道为什么直到我看看
和 是如何不相关的。我曾短暂地玩弄过将 放在 上,但您的评论只是证实了我对元素范围的怀疑,这是有道理的!
标签: typescript angular