これは私の問題です。私は入力を通過した連絡先を編集するこのコンポーネントをここに持っています。このコードは機能し、入力テキスト(2通りのデータバインディング)で何かを変更すると連絡先パラメータが変更され、ヒットしたら別のコンポーネント(すべての連絡先の一覧を表示)にルーティングされたときに「保存」されます。私はその後、一時変数を変更し、私の連絡先のクローンを取るtemp:Contact
変数を追加する連絡先オブジェクトにそれをクローン化することにより、このように私のクラスを変更した場合、私が打ったとき角2のステートレスまたはステートフル?
import {Component} from 'angular2/core';
import {Contact} from "./contact";
import {Router} from "angular2/src/router/router";
import {OnInit} from "angular2/src/core/linker/interfaces";
import {ContactService} from "./contacts.service";
@Component({
selector:'editor',
template:`
<div class='editor'>
<label>Edit name : </label><input type="text" [(ngModel)]="contact.name">
<br>
<label>Edit email : </label><input type="text" [(ngModel)]="contact.email">
<br>
<label>Edit phone number: </label><input type="text" [(ngModel)]="contact.phone">
<br>
<div class="description">
Description:
<br>
<textarea rows="4" cols="50" [(ngModel)]="contact.description"></textarea>
</div>
<br>
<input type="button" (click)="onCreateContact()" class="button" value="Save Changes"/>
</div>
`,
inputs:["contact"],
styles:[
`
label {
display: inline-block;
width: 145px;
border-left: 3px solid #006ec3;
padding-left: 8px;
padding-bottom: 8px;
}
.description{
border-left: 3px solid #006ec3;
padding-left: 8px;
padding-bottom: 8px;
}
`
]
})
export class ContactEditorComponent implements OnInit{
public contact:Contact;
constructor(private router:Router){
}
onCreateContact(){
this.router.navigate(['Contacts']);
}
}
は今、変化はもう保存されませんボタン。
@Component({
selector:'editor',
template:`
<div class='editor'>
<label>Edit name : </label><input type="text" [(ngModel)]="temp.name">
<br>
<label>Edit email : </label><input type="text" [(ngModel)]="temp.email">
<br>
<label>Edit phone number: </label><input type="text" [(ngModel)]="temp.phone">
<br>
<div class="description">
Description:
<br>
<textarea rows="4" cols="50" [(ngModel)]="temp.description"></textarea>
</div>
<br>
<input type="button" (click)="onCreateContact()" class="button" value="Save Changes"/>
</div>
`,
inputs:["contact"],
styles:[
`
label {
display: inline-block;
width: 145px;
border-left: 3px solid #006ec3;
padding-left: 8px;
padding-bottom: 8px;
}
.description{
border-left: 3px solid #006ec3;
padding-left: 8px;
padding-bottom: 8px;
}
`
]
})
export class ContactEditorComponent implements OnInit{
public contact:Contact;
public temp:Contact;
constructor(private router:Router){
}
onCreateContact(){
this.contact = (<any>Object).assign({}, this.temp);
console.log(this.contact.name);
this.router.navigate(['Contacts']);
}
ngOnInit(){
this.temp = (<any>Object).assign({}, this.contact);
}
}
すべての私の連絡先は、連絡先ののConst配列を含む別のファイルに保存し、contact.serviceを介してアクセスされます。
働い魅力のように感謝!同じオブジェクト上に作成するには、次のようにします: Object.assign(contact、contact); ありません child.contact = Object.assign({}、contact); は、オブジェクトの新しいコピーを作成するだけです。私はそれを得たか? –
オブジェクト。2番目のオブジェクトのすべての直接プロパティを最初のオブジェクトにコピーし、最初のオブジェクトを返します。したがって、Object.assign({}、conact)を使用する場合は、新しい空のオブジェクトを作成し、この新しい空のオブジェクトにcontactのすべてのプロパティをコピーします。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assignを参照してください。 –