私は2つの兄弟コンポーネント、1つのMapComponentと1つのMenuComponentを持っています。すべてのプロジェクトはGoogleMap(MapComponent)に表示されます。マーカーをクリックすると、そのプロジェクトのID(siteId)が取得されます。私がしたいのは、そのプロジェクトidを取得してそれを私のメニューのリンクに使用することです。プロジェクトごとに、プロジェクトIDと一意のリンクを作ります:/ project1/10001 私は兄弟から共有サービスを持っていますコンポーネントは値を直接交換できません。私は共有サービスにプロジェクトIDを書くことができますが、私の問題は私のmenulinksでプロジェクトIDを取得することです。これはどうすればいいですか? (私はAngular4を使用しています)Angular4の2つの兄弟コンポーネント間の共有サービス
MapComponent
clickedMarker(siteId: string) {
this.ss.selectedSite(siteId);
this.route.navigate(['project', siteId]);
}
MenuComponentは
selectedSite = this.sharedService.siteId;
<a class="submenu" *ngFor="let submenu of item.submenu, let i = index"
md-list-item [routerLink]="[submenu.url, selectedSite]">
<i class="material-icons spacer">{{submenu.icon}}</i>
<div *ngIf="!minimalMenuOpen">{{submenu.name}}</div>
</a>
SharedService
が@Injectable()
export class SharedService {
public constructor() {
console.log('Service is succesfully initialized');
}
siteId;
selectedSite(siteId) {
this.siteId = siteId;
console.log(siteId);
}
}
BehaviorSubjectと観測の違いは何ですか?私は両方が他の人によって頻繁に使用されるのを見るからです。 – viddrawings
BehaviourSubjectは、コンポーネントが存続しているか、または値が変更されている限り、最後の値を保持します。 Observableは、非同期データを管理するために使用される非同期メソッドです。 Observable(I.E.変数)を参照している値に値が変更された場合、変更を '.subscribe()'メソッドに送信してそのデータを使用します。なぜなら、 'Promise'は一度だけ実行され、' Observable'は複数回実行されるからです。 –
このソリューションはうまくいきますが、routerLinkは既にインスタンス化されていますので、私はrouterLink(これは現在動作していません)を更新する必要があります。 – viddrawings