我对角度很新,我正在尝试创建一个利用动态路由的小应用程序。我有一个"成员"列出所有当前成员的页面,如果单击某个特定成员,则会加载另一个用于显示用户详细信息的页面。目前我只是想显示"你点击了xxxs个人资料"但我无法弄清楚如何显示点击的用户名..
会员组成部分:
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Params, Router } from '@angular/router';
@Component({
selector: 'app-members',
template: `
<li *ngFor='let members of members' (click)='onSelect(members)'>
<span class='badge'> {{members.name}} : {{members.id}} </span>
</li>
` ,
styleUrls: ['./members.component.css']
})
export class MembersComponent implements OnInit {
members = [
{'id': 1, 'name': 'Person 1'},
{'id': 2, 'name': 'Person 2'},
{'id': 3, 'name': 'Person 3'}
];
constructor(private router: Router) { }
ngOnInit() {
}
onSelect(members) {
this.router.navigate(['/member', members.id]);
}
}
我不知道如何在成员组件中显示点击的个人资料名称,有人愿意向我建议解决方案吗?
成员组件:
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Params, ParamMap, Router } from '@angular/router';
import { MembersComponent } from '../members.component';
@Component({
selector: 'app-member',
template: `
You have clicked on {{ ****to be displayed**** }} profile!
`,
styleUrls: ['./member.component.css']
})
export class MemberComponent implements OnInit {
constructor(private router: ActivatedRoute ) { }
ngOnInit() {
}
}
答案 0 :(得分:2)
使用EventEmmiters EventReceiver
@Input()
或使用服务,您可以通过两种方式将数据传递到组件中。
在这种情况下,由于您使用的是两个独立的(非父/子),您应该使用服务 communicate between two components
答案 1 :(得分:1)
除上述解决方案外,如果您不介意URL中的名称,可以在查询参数中传递名称。
在会员组成部分:
onSelect(members) {
this.router.navigate(['/member', members.id], {queryParams: {name: members.id}});
}
在会员组件下:
...
template: `You have clicked on {{memberName}} profile!`,
...
public memberName: string = "";
public subs$;
constructor(private _route: ActivatedRoute) ...
ngOnInit() {
this.subs$ = this._route
.queryParams
.subscribe((params) => {
this.memberName = params["name"];
})
}
// this is to kill the subscription
ngOnDestroy() {
if (this.subs$) {
this.subs$.unsubscribe();
}
}