基本上,您想要完成双向绑定 - 即对象值的更改:例如person.job.title
更新您的新编辑组件,而且编辑组件所做的更改也会反映回对象值。
在 Angular 中,这意味着您必须以两种方式绑定:
<edit-field [field]="person.job.title" (change)="person.job.title=$event"></edit-field>
你在哪里edit-field
组件有一个@Output
每当有人键入时发出更改值的属性。从 @Output 属性发出的值将位于变量中$event
您只需将其分配回您要更新的属性即可。
因此,您的 EditFieldComponent 可能类似于:
@Component({
.....
template: `
<input (input)="change.emit($event.target.value)" .... />
`
})
export class EditFieldComponent {
change = new EventEmitter();
}
上面的意思是,每当输入字段上触发输入事件时,组件的change
输出属性将发出输入字段的新值。
===========
如果您理解上述所有内容,那么 Angular 就为这种情况提供了一个小捷径。如果组件的输出属性以特定方式命名,则可以简化编写双向绑定的方式。
所以,如果你的输入属性是field
,然后您命名输出属性fieldChange
您可以使用一些奇特的语法来减少您需要输入的内容。
i.e.
<edit-field [field]="person.job.title" (fieldChange)="person.job.title=$event"></edit-field>
相当于:
<edit-field [(field)]="person.job.title"></edit-field>