評価があり、それはpostgresデータベースから取得され、テーブルに表示されます。 レーティングを編集するとき、私は "TagInputComponent"から来るような入力のような要素を通して、レーティングを追加または削除することしかできません。配列の初期状態のコピーを作成する方法は?
TagInputComponentは次のようになります。
import { Component, DoCheck, IterableDiffers, OnInit, Input, Output } from 'angular2/core';
import * as _ from 'underscore';
@Component({
selector: 'taginput',
templateUrl: 'app/shared/taginput.component.html',
styleUrls: ['assets/stylesheets/taginput.css']
})
export class TagInputComponent implements OnInit, DoCheck {
@Input() tags: string[];
newTag = '';
oldTags: string[];
differ: any;
constructor(differs: IterableDiffers) {
this.differ = differs.find([]).create(null);
}
ngOnInit() { }
ngDoCheck() {
var changes = this.differ.diff(this.tags);
if (changes) {
changes.forEachAddedItem(r => console.log('added ' + r.item));
changes.forEachRemovedItem(r => console.log('removed ' + r.item));
}
}
それは、このようDataFormComponenetに使用されます:それはデータで満たされると
<taginput [tags]="datapoint.tags"></taginput>
にはどうすればoldTags
にtags
のコピーを作成するのですか?
これは、サービスからのデータがまだないため、ngOnInit()
が早すぎることに気付きました。 ngDoCheck()
では常にcurrentStateに更新されます。
これは簡単な作業のようですが、どうやってそれを行うか分かりません。
igorzg答えは私のために働いていましたが、私はそれを自分のニーズに変更しました。これは私がやったことです:
ngDoCheck() {
var changes = this.differ.diff(this.tags);
if (changes) {
if (Array.isArray(changes.collection) && !this.oldTags) {
this.oldTags = changes.collection.slice();
}
changes.forEachAddedItem(r => console.log('added ' + r.item));
changes.forEachRemovedItem(r => console.log('removed ' + r.item));
}
}