首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何创建一个嵌套的ngrx-forms,它可以添加或删除控件到它的子组?

要创建一个嵌套的ngrx-forms,可以使用以下步骤来添加或删除控件到其子组件:

  1. 安装所需的依赖:在项目中安装 @ngrx/store@ngrx/forms,可以使用npm或者yarn进行安装。
  2. 创建父组件:创建一个父组件,用于包含嵌套的 ngrx-forms 表单。
  3. 创建父组件的表单:在父组件中,创建一个 ngrx-forms 表单。你可以使用 createFormGroupState 函数来创建一个初始的表单状态对象。
代码语言:txt
复制
import { Component } from '@angular/core';
import { createFormGroupState, FormGroupState } from 'ngrx-forms';

@Component({
  selector: 'app-parent',
  template: `
    <form [ngrxFormState]="formState$ | async">
      <!-- Add your form controls here -->
    </form>
  `,
})
export class ParentComponent {
  // 创建一个初始表单状态对象
  formState$: Observable<FormGroupState<YourFormValue>> = of(createFormGroupState<YourFormValue>('parentForm'));
}
  1. 创建子组件:创建一个子组件,用于包含被动态添加或删除的子控件。
  2. 在子组件中订阅父组件表单状态:在子组件中,订阅父组件的表单状态,以便可以动态添加或删除子控件。你可以使用 select 操作符从 ngrx-forms 中选择特定的表单控件。
代码语言:txt
复制
import { Component, Input } from '@angular/core';
import { FormGroupState } from 'ngrx-forms';
import { Observable } from 'rxjs';

@Component({
  selector: 'app-child',
  template: `
    <div [ngrxFormControlState]="controlState$ | async">
      <!-- Render your form control here -->
    </div>
  `,
})
export class ChildComponent {
  @Input() controlName: string;
  @Input() parentFormState: Observable<FormGroupState<YourFormValue>>;

  controlState$: Observable<AbstractControlState<YourControlValue>>;

  ngOnInit() {
    // 订阅父组件表单状态,选择特定的表单控件
    this.controlState$ = this.parentFormState.pipe(
      select(
        selectFormControlState(this.controlName),
      ),
    );
  }
}
  1. 在父组件中动态添加或删除子控件:在父组件中,使用 ngrx-forms 提供的 addControlremoveControl 函数来动态添加或删除子控件。
代码语言:txt
复制
import { Component } from '@angular/core';
import { createFormGroupState, FormGroupState } from 'ngrx-forms';

@Component({
  selector: 'app-parent',
  template: `
    <form [ngrxFormState]="formState$ | async">
      <app-child *ngFor="let controlName of controlNames" [controlName]="controlName" [parentFormState]="formState$ | async"></app-child>
      <button (click)="addChildControl()">Add Control</button>
      <button (click)="removeChildControl()">Remove Control</button>
    </form>
  `,
})
export class ParentComponent {
  controlNames: string[] = ['control1', 'control2']; // 控件名称的数组

  formState$: Observable<FormGroupState<YourFormValue>> = of(createFormGroupState<YourFormValue>('parentForm'));

  // 添加子控件
  addChildControl() {
    this.controlNames = [...this.controlNames, `control${this.controlNames.length + 1}`];
    this.formState$.dispatch(addControl(this.controlNames[this.controlNames.length - 1], null));
  }

  // 删除子控件
  removeChildControl() {
    if (this.controlNames.length > 0) {
      const controlToRemove = this.controlNames[this.controlNames.length - 1];
      this.controlNames = this.controlNames.slice(0, this.controlNames.length - 1);
      this.formState$.dispatch(removeControl(controlToRemove));
    }
  }
}

这样就可以创建一个嵌套的 ngrx-forms 表单,并且可以通过点击按钮动态地添加或删除子控件。根据你的具体业务需求,你可以根据自己的需要对控件进行扩展和定制。

相关搜索:如何将父元素的宽度固定到它的一个子元素?我在git配置中添加了一个错误的变量。如何删除它?我可以动态添加一个逗号(,)到一个CSS伪元素,它的值来自CSS变量如何从asp.net创建一个完全为空(或接近它)的响应?如何删除选择框的所有选项,然后添加一个选项并使用jQuery选择它?我可以创建一个通道,但是我还需要添加什么来设置它的权限呢?如何创建一个React tag组件来有条件地显示它包装的子元素?如何创建一个方法,它的参数是一个函数,它的参数可以是来自任何类的对象,这些对象扩展了一个给定的类?如何将一个道具从父样式组件传递到它的子样式组件(无论多深如何计算出一个数字在矩阵中的位置,以及如何删除和添加它?如何创建一个类,该类的对象接受构造函数中的一个函数并可以执行它?如何检测用户是否从我的网站导航到另一个网站或只是简单地刷新它如何创建一个excel文件,并在每次运行时添加新的输出数据行来更新它?我如何才能将mysql中的数据显示到一个模式,在那里我还可以更新它?我如何创建一个自定义控件'MyThumb‘,它继承自Thumb,同时,用户无法设置MyThumb的宽度和高度?如何根据值将行循环到一个组中,并创建一个可以单独导出的dataframe?我正在使用django创建一个社交网站,我需要创建一个具有组管理员的组模型,该组管理员可以执行添加和删除成员等活动我如何向这个函数添加一个if #anders checkbox = checked,删除隐藏的类以显示<textarea #otherInput,并在未选中时删除它?如何创建5x5二维数组的2x2子数组,旋转它,然后将其添加回原始数组?我得到了错误的“你不能调用创建,除非父被保存”,当尝试添加产品到卡片时如何修复它?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券