【问题标题】:Angular: Help on in-place editable formAngular:关于就地可编辑表单的帮助
【发布时间】:2023-03-12 20:11:01
【问题描述】:

我正在尝试创建一个就地可编辑表单,其控件应在单击外部按钮时立即在可编辑和仅查看模式之间切换(我不希望单击单个控件以切换编辑模式)。

我创建了这个StackBlitz,但我收到一个错误消息,No provider for NgControl。我不想将表单元素包装在我要创建的每个可编辑控件组件上。请帮我解决这个问题。

我的预期控制是这样的, <editable-control [mode]="formMode" type="text"></editable-control>

【问题讨论】:

    标签: angular angular2-template angular2-forms angular2-formbuilder


    【解决方案1】:

    您的自定义表单组件实现了ControlValueAccessor 接口,因此它需要NgControl 提供程序。您必须使用ReactiveFormsModule 而不是FormsModule

    所以你必须从@angular/forms 导入它并添加到对应NgModule 的imports 数组中:

    // ...
    import { ReactiveFormsModule } from '@angular/forms';
    
    @NgModule({
      imports: [
         // ...
         ReactiveFormsModule
      ]
    })
    // ...
    

    要使用您的自定义组件,您可以将它与formGroup 指令一起使用。例如:

    <form [formGroup]="myForm">
      <editable-control [mode]="formMode" type="text" formControlName="myText">
      </editable-control>
    </form>
    

    【讨论】:

    • 如何提供?
    • 那行得通...现在它显示另一个错误,@ 987654329@,但我不想在该组件内包装formGroup,因为我想从消耗的组件中做到这一点它。有什么解决方法吗?
    • 现在我在组件内部使用了ngModel 而不是formControlName,它可以工作了!
    • 啊,你的意思是自定义组件中的输入元素,没有理解。但是是的,在您的自定义组件中使用 ngModel 是正确的方法。
    猜你喜欢
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 2013-03-05
    相关资源
    最近更新 更多