在Angular(5)中,我正在尝试为模板驱动的表单编写一组可重用的表单控件。它需要能够从父组件中获取模型并将其传递给元素以进行双向数据绑定。
这就是我所拥有的。
import { Component, OnInit } from '@angular/core';
import{ NgForm } from '@angular/forms';
@Component({
selector: 'admin-panel',
template: `
<label>Settings</label>
<!-- the below doesn't work, but is an example of how I'd like to use it -->
<settings name="settings" [(ngModel)]="preset.settings"></settings>
`
})
export class AdminPanelComponent implements OnInit
{
preset;
ngOnInit()
{
this.preset = {
name: '',
settings: {
settingOne: 'foo',
settingTwo: false,
settingThree: 14
}
}
}
对于下面的ngModel,我还尝试将其设置为model.settingOne
,model.settingTwo
,但这也不起作用。
<div [ngModelGroup]="group">
<select name="settingOne" [(ngModel)]="model.settingOne">
<option value="foo">Foo</option>
<option value="bar">Bar</option>
</select>
<input type="checkbox" name="settingTwo" [(ngModel)]="model.settingTwo">
</div>
import { Component, Input } from '@angular/core';
import { ControlContainer, NgForm } from '@angular/forms';
@Component({
selector: 'settings',
templateUrl: './settings.component.html',
viewProviders:[{provide: ControlContainer, useExisting: NgForm}]
})
export class SettingsComponent
{
@Input('name') group: string;
//@Input('model') model;
}
答案 0 :(得分:0)
首先,在 admin-panel.component.ts 中,替换
行<settings name="settings" [(ngModel)]="preset.settings"></settings>
与
<settings name="settings" [(model)]="preset.settings"></settings>
匹配 settings.component.ts 中的输入变量是在正确的轨道上。
但是,它似乎不起作用,因为我的形式是
[ngFormOptions]="{ updateOn: 'submit' }"
,所以没有任何内容得到更新。删除它允许更新通过。
答案 1 :(得分:0)
如果在任何组件上实现“ ControlValueAccessor”,那么我们可以为您的自定义组件自动进行双向数据绑定。
实施here