首页 文章

Angular(5):可重用表单组件的双向数据绑定?

提问于
浏览
0

在Angular(5)中,我正在尝试为模板驱动的表单编写一组可重用的表单控件 . 它需要能够从父组件中获取模型并将其传递给元素以进行双向数据绑定 .

这就是我所拥有的 .

admin-panel.component.ts(父表格)

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
            }
    }
}

settings.component.html

对于下面的ngModels,我也尝试将它设置为 model.settingOnemodel.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>

settings.component.ts

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;
}

1 回答

  • 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' }" ,所以没有任何更新 . 删除它允许更新通过 .

相关问题