マイ状況:アンギュラ4 - 別のコンポーネントからオブジェクトを渡し(ノー親 - 子階層)
私は以上のループされる配列からオブジェクトを表す各タイルとタイルを示す成分を持ちますありがとう。 タイルをクリックすると、オブジェクトを別のコンポーネントに渡します。このコンポーネントは、変更可能なフィールドにそのオブジェクトのすべてのプロパティを表示することができます。 - 子階層と、共有サービスを使用する必要があることを説明するいくつかの記事
をいくつかの研究を行うと、親のためにこれを達成するためにどのように私を示す複数の投稿渡って来た後:私が試してみました何
必要な機能を実現するために、このようなサービスを試して設定することにしました。
しかし、私は別のルートに移動する必要があるとは思わない。ディテールコンポーネントでサービスを取得するときに、サービスに渡されるオブジェクトが定義されていないため、ナビゲーションが早い場所を見つけるようです。
マイコード:
タイルを示す成分が共有サービスにクリックされたオブジェクトを渡すために、以下の機能を有する:
editPropertyDetails(property: Property) {
console.log('Edit property called');
return new Promise(resolve => {
this.sharedPropertyService.setPropertyToDisplay(property);
resolve();
}).then(
() => this.router.navigate(['/properties/detail'])
)
}
共有サービスは、プロパティオブジェクトを設定する機能を有しますこれを検索すると、次のようになります。
@Injectable()
export class SharedPropertyService {
// Observable
public propertyToDisplay = new Subject<Property>();
constructor(private router: Router) {}
setPropertyToDisplay(property: Property) {
console.log('setPropertyToDisplay called');
this.propertyToDisplay.next(property);
}
getPropertyToDisplay(): Observable<Property> {
console.log('getPropertyToDisplay called');
return this.propertyToDisplay.asObservable();
}
}
最後に、受信する必要のある詳細コンポーネントクリックされたが未定義のオブジェクトを取得したオブジェクト:
export class PropertyDetailComponent implements OnDestroy {
property: Property;
subscription: Subscription;
constructor(private sharedPropertyService: SharedPropertyService) {
this.subscription = this.sharedPropertyService.getPropertyToDisplay()
.subscribe(
property => { this.property = property; console.log('Detail Component: ' + property.description);}
);
}
ngOnDestroy() {
// When view destroyed, clear the subscription to prevent memory leaks
this.subscription.unsubscribe();
}
}
ありがとうございます!
これをスタックブリッツで再現できれば分かりにくいですが、理解しやすくなります。今のところ[共有サービス](https://rahulrsingh09.github.io/AngularConcepts)より簡単な説明として、 –
では、両方のコンポーネントを含むモジュールで共有サービスを提供する必要があります。これは本当ですか?さもなければ、それはシングルトンではなく、サービスはその目的を逸するでしょう。 – marvstar
はい、サービスはフィーチャモジュールのプロバイダにリストされています。 – DennisN