この初心者の質問..私はAngular2のマニュアルを読んでてきた が、私は保存/利用可能な機能をキャンセル 作るために使用されているサービスを復元 階層的依存関係インジェクター章の例に出くわしたです編集のためにAngular2ドキュメント - 階層的依存関係インジェクター(サービスの復元)
これはサービスです。
export class RestoreService<T> {
originalItem: T;
currentItem: T;
setItem (item: T) {
this.originalItem = item;
this.currentItem = this.clone(item);
}
getItem() :T {
return this.currentItem;
}
restoreItem() :T {
this.currentItem = this.originalItem;
return this.getItem();
}
clone (item: T) :T {
return JSON.parse(JSON.stringify(item));
}
}
私はそれについてとても興奮していたので、私はそれを自分自身を試してみました! まず私はこのような値を設定しています:その後
ngAfterContentInit(){
this.metadata = {
languages: this.selected_languages,
countries: this.selected_countries,
international: false
}
}
set metadata(metadata: CvMetadata){
this._restoreService.setItem(metadata);
}
get metadata(): CvMetadata{
return this._restoreService.getItem();
}
私は例えばngModel でメタデータプロパティの値を変更しています:[(ngModel)]="metadata.languages[0]"
質問:私のsrupriseときのため
メタデータのプロパティ値がngModelで更新されます - currentItemは変更され、orginalItemは変更されていません!私が理解できないことは、それがどうやって可能なのかということです。私は、ngModelがメタデータのプロパティを設定するためにsetterを使用すると考えました。しかし、私は元のデータを設定すると、セッターは一度だけ呼び出されます。 ngModelは、originalItemではなくcurrentItemだけを変更する必要があることをどのように知っていますか? これは黒い魔法ですか?
私は知っている..私はこれを説明する誰かが必要ですが、残念ながら、または幸いにもあなただけがいる!
ありがとう!
しかし 'languages [0]'の項目。 – Abdulrahman
@Abdulrahman真はそれで論争することはできませんが、それは私の混乱の原因ではありません。どのようにcurrentItemだけを変更するのか..また、RestoreServiceはその機能をどのように提供しますか? –