首页
学习
活动
专区
工具
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子数组,旋转它,然后将其添加回原始数组?我得到了错误的“你不能调用创建,除非父被保存”,当尝试添加产品到卡片时如何修复它?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C#设计模式09——组合模式的写法

组合模式可以方便地处理层次结构,例如组织机构、文件系统或UI控件。使用该模式,可以将树形数据结构的遍历变得简单且具有一致性,而无论遍历哪个节点,只需按照相同的方式进行。...- 叶子节点(Leaf): 组合树结构中的最底层元素,它们没有子节点,具有特定的行为。 - 容器(Composite): 包含一组子节点并维护它们之间的组合结构。...组合模式如何实现? 组合模式的一个常见实现方案是将组件抽象成接口或抽象类。这个抽象类包含容器和叶子节点的通用行为和属性,并定义了添加、删除和获取子节点的方法。...- 组合对象可以递归嵌套,允许动态的添加和删除节点和树形结构。 - 通过共享相同接口或抽象类,客户端代码可以无缝切换一个元素与多个元素之间的关系,从而简化代码逻辑。...在Main方法中,创建了一个根容器对象,并添加了一些叶子节点和容器对象。输出结果是一个树形结构。

19720

【QT】控件 -- 多元素类 | 容器类 | 布局类

* child) 删除对应的子节点 parent() 获取该元素的父节点 通过上述提供的方法和信号,可以创建、管理和操作树形结构的数据,并响应用户的交互。...Group Box – 分组框 使用 QGroupBox 实现一个带有标题的分组框,可以把其他的控件放到里面作为一组,这样看起来能更好看一点。...,可以添加标签页或者删除标签页 (2)编写 widget.cpp,进行初始化,给标签页中放个简单的 label 注意新创建的 label 的父元素,是 ui->tab 和 ui->tab_2 Qt 中使用父子关系决定该控件...【使用 QGridLayout 管理元素】 代码中创建 QGridLayout 和 4 个按钮 使用 addWidget 添加控件到布局管理器中,但是添加的同时会指定两个坐标,表示放在第几行,第几列。...注意:上述属性在构造函数设置即可 【创建一组左右排列的按钮】 在界面上创建一个 QVBoxLayout ,并添加两个按钮,在上面运行结果中我们可以知道这个肯定是紧挨的,但是如果在两个按钮中间添加一个 spacer

12810
  • 前端必读:Vue响应式系统大PK(下)

    基本方法 第一组 包括控制数据响应的最基本方法 ref接受一个原始值或一个普通对象,然后返回一个响应且可变的ref对象。ref对象只有一个value指向原始值或纯对象的属性。...本示例从创建settings浅引用对象开始,在视图中添加两个输入控件以编辑其width和height属性。但该属性却不能修改,为了解决这个问题,添加一个按钮,该按钮可以更改整个对象及其所有属性。...最后两个示例中的嵌套对象coords均不受转换的影响, Vue不会跟踪它的任何修改,可以自由修改。...转换方式 接下来的三种方法用于将代理转换为ref或普通对象: toRef为源响应对象上的属性创建一个引用。引用将响应性连接保持到其源属性。 toRefs将响应对象转换为普通对象。...接着在回调函数中设置一个条件,以测试该音量的值是否可以分为分成三份,当它返回true时,将显示一条警报消息。 最后,我们创建一个stateref并设置一个watch函数来跟踪它的更改。

    1.4K20

    UITableView在Flutter中是什么?

    ListView 在Flutter中,ListView可以沿一个方向(垂直或者水平方向)来排列其所有子Widget,因此常被用于需要展示一组连续视图元素的场景,比如通讯录、优惠券、商家列表等。...ListView提供了一个默认构造函数ListView,我们可以通过设置它的 children 参数,很方便地将所有的子Widget包含到ListView中。...所以,考虑到创建子Widget产生的性能问题,更好的方法是抽象出创建子Widget的方法,交由ListView统一管理,在真正需要展示该子Widget时再去创建。...在Flutter中,因为Widget并不是渲染到屏幕的最终视觉元素(RenderObject才是),所以我们无法像原生的iOS或Android一样,向持有的Widget对象获取或设置最终渲染相关的视觉信息...如下代码所示,我们声明了一个有着100个元素的列表项,当滚动视图到特定位置后,用户可以点击按钮返回到列表顶部: 首先,我们在State的初始化方法里,创建了ScrollController,并通过_controller.addListener

    5.6K10

    C# WPF布局控件LayoutControl介绍

    可以将LayoutGroup容器作为子容器添加到LayoutControl。LayoutGroup容器允许您将其项目并排(垂直或水平)或作为选项卡进行排列。...LayoutGroup可以包含其他LayoutGroup对象作为子对象,以不同的方向排列它们的项目。这允许创建非线性布局: 使用LayoutControl的最大好处是,它会自动维护子控件的一致布局。...即使调整窗口大小、添加或删除控件,或者更改控件的字体设置,控件也不会重叠。(如果手动调整控件的边距属性,控件可能会重叠)。...它表示一个容器控件,可以并排(在一行或一列中)或以选项卡的形式显示其子控件。您可以使用LayoutGroup。...为了了解此布局是如何构建的,让我们让组的边框和标题可见: 在这里,这些项目组合如下: LayoutControl垂直排列组1和组5。 第一组水平排列第二组和一个标签组。

    3.6K10

    基于jQuery 常用WEB控件收集

    它能够在一个页面中加入多个颜色选择控件,然后每个控件关联到页面中的一个元素比如:文本输入框。 Farbtastic ContextMenu 用于创建右键弹出菜单的jQuery插件。...可以自己自定义创建,删除,嵌套,重命名,选择节点的规则。在这些操作上可以添加多种监听事件。...支持对放大的图片添加阴影效果,对于一组相关的图片添加导航操作按纽,该Lightbox除了能够展示图片之外,还可以展示iframed内容, 通过CSS自定义外观。...tablesorter idTabs idTabs是一个能够创建简单到复杂Tab控件的jQuery插件。支持动态添加和选择Tab,idTabs能够绑定到不同的事件如mouseover。...JQuery Pager jqDock 这是一个能够将一组图片转换成类似于Mac风格鱼眼菜单(Dock Menu)的jQuery插件。菜单可以是水平方向或垂直方向。

    7.5K10

    经典布局:如何定义子控件在父容器中的排版位置?

    在之前的文章中,我们一起学习了构建视图的基本元素,文本Text、图片Image和按钮,用于展示一组连续视图元素的ListView,以及处理多重嵌套的可滚动视图的CustomScrollView,等等。...这些布局类的Widget,内部都会包含一个或多个子控件,并且都提供了摆放子控件的不同布局方式,可以实现子控件的对齐、嵌套、层叠和缩放等。...Container,是一种允许在其内部添加其他控件的控件,也是UI框架中的一个常见概念。...在Flutter中,Container本身可以单独作为控件存在(比如单独设置背景色、宽高),也可以作为其他控件的父级存在:Container可以定义布局过程中子Widget如何摆放,以及如何展示。...Stack控件允许其子Widget按照创建的先后顺序进行层叠摆放,而Position控件则用来控制这些子Widget的摆放位置。

    4.6K30

    例说 Constraint Layout:初探

    假设我们有一个嵌套了 3 层的 RelativeLayout,那么每次其内容有变化需要 requestLayout()时,其最底端的子 View 需要进行 2^3 即 8 次 onMeaure(),一旦...再譬如:RL 只能把某个 View 作为一个整体,限制它相对父容器或其他兄弟 View 某一边的位置;而 CL 可以规定一个 View 的任意一边或中心、甚至是文字的基线相对于父容器或其他兄弟任意边、中心...(你也可以自行选择如何预览布局:既可以让设计视图和蓝图视图并列显示,也可以只显示其中任一个。) 设计视图主要用于预览最终的界面效果,采用彩色界面,它默认不显示约束,除非你的鼠标在上面停留。...3.2.3 使用辅助工具自动创建约束 在 3.2.2 中,我们看到必须为控件添加足够多的约束来将其安放在想要的位置上。...打开 Autoconnect 功能 Autoconnect 功能打开后(默认为关闭状态),当控件被放置到布局内时,编辑器就会自动创建 2 个或更多个必要的约束将控件相对于其父布局摆放。

    2.1K10

    【愚公系列】2023年11月 Winform控件专题 TreeView控件详解

    Nodes属性是一个TreeNodeCollection类型的对象,其中包含了所有TreeView控件的节点。使用Nodes属性可以对树形结构进行动态的添加、删除、移动和访问等操作。...ImageList属性是一个ImageList对象,用于管理TreeView控件中所有节点的图标。可以通过代码或者设计器添加图标到ImageList中。...TreeView控件到表单中this.Controls.Add(treeView1);在上述代码中,通过创建一个ImageList对象并添加两个图标,然后将ImageList设置到TreeView控件的...接着判断是否可以访问该驱动器,并添加子节点。如果没有访问权限,则不添加子节点。每个子节点都创建一个TreeNode,并将其加入到根节点rootNode中。...如果没有加载过,则将空节点删除,并加载该节点的子节点,并将它们加入到该节点的子节点集合中。同样地,如果没有权限访问子节点,则不添加子节点。

    78512

    【愚公系列】2023年11月 二十三种设计模式(八)-组合模式(Composite Pattern)

    以下是抽象构件的概念和作用:概念:抽象构件是一个抽象类或接口,它声明了用于叶子节点和复合节点的共同操作。抽象构件通常包括对于添加子节点、删除子节点、获取子节点、以及执行操作等方法的声明。...封装通用行为:抽象构件可以包含一些通用的行为,例如添加和删除子节点的操作,这些行为对于整个树形结构都是通用的,因此可以在抽象构件中进行实现。...限制操作:由于叶子构件没有子节点,因此它通常会在添加子节点、删除子节点等操作上抛出异常或不做任何操作,以防止客户端试图对其进行组合操作。...作用:组合对象:容器构件充当组合模式中的组合对象,它们可以包含一组子节点,这些子节点可以是叶子构件或其他容器构件。这种组合允许构建具有多层次结构的对象。...容器构件在组合模式中用于表示复合节点,它们可以包含一组子节点,并递归地构建层次结构。容器构件的作用是允许创建具有多层次组织结构的对象,使得客户端可以一致地处理整个结构。

    19611

    Flutter学习

    您可以从父级控件调用addChild或removeChild以动态添加或删除View。...在Flutter中,因为widget是不可变的,所以没有addChild。相反,您可以传入一个函数,该函数返回一个widget给父项,并通过 布尔值控制该widget的创建。...你可以将它类比成为网页中的html标签,且它自带路由、主题色等功能。 Scaffold Scaffold通常被用作MaterialApp的子Widget,它会填充可用空间,占据整个窗口或设备屏幕。...还有这么一种场景也可以使用SizeBox,就是可以代替padding和container,然后 用来设置两个控件之间的间距,比如在行或列中就可以设置两个控件之间的间距 主要是可以比使用一个padding...或者container简单方便 (在Flutter中可能用不同的控件可以实现到相同的目的,尽量使用越简单的widget来实现) 控件在整个手机屏幕中间对齐:ConstrainedBox、SizedBox

    2.6K20

    在ASP.NET 2.0中建立站点导航层次

    站点导航特性需要一个根<siteMapNode>来确保沿着节点层次的访问最终汇聚到一个已知的节点。你可以在根<siteMapNode>元素下嵌套多个<siteMapNode>元素。...· SiteMapPath--一个breadcrumb控件,它检索用户的当前页面并显示页面的层次结构。这让用户可以导航回层次中其它的页面。...如果你使用SiteMapDataSource控件,那么数据绑定就是自动进行的。 · Menu--提供水平的或垂直的用户界面,当用户把鼠标放在一项上的时候会弹出子菜单。...如果你点击页面左部的Treeview链接,可以看到用户控件是如何自动地显示适当的"前一个主题"和"后一个主题"链接的。用户控件还显示了另外一个超链接,你可以点击它返回主页。...如果你把鼠标停留SiteMapPath控件的链接上,可以注意到控件中的最后两个链接带有的URL和Title包含了点击路径的正确查询字符串和描述信息。

    7.1K10

    未来布局之星——ConstraintLayout

    添加约束演示 可以看到,按钮控件有四个方向的约束,如下图所示,按钮的上、下、左、右边上各有一个小圆圈,鼠标可拖动小圆圈到ConstraintLayout,与其添加约束。 ?...除了居中,约束还可以设置控件两边到边界之间的距离比例,通过在右侧属性面板中,拖动水平和垂直方向的进度条来调整两边距离的比例。 ?...删除约束 学习了添加约束后,来看看如何删除约束?删除约束有三种方式: 删除单个约束 将鼠标移动到要删除的约束对应的小圆圈,待小圆圈出现闪烁的红色圈圈时,点击小圆圈即可删除约束。...如下图,创建一个垂直方向的参考线,将其切换至百分比模式,拖动到50%的位置,再将两个控件在左右两侧分别与Guidelines添加约束,然后两个控件的底边相互添加约束即可实现合并居中的效果。...Guidelines 这里说明一下,创建完Guidelines后,读者们会发现它很难拖动,这里有一个小技巧:将鼠标按住划过Guidelines,然后放到Guidelines的位置,按住鼠标即可轻松实现拖动

    1.9K20

    Angular2 VS Angular4 深度对比:特性、性能

    接下来一起了解Angular2这个版本发布的原因以及如何将其添加到Web开发中。 ...该模板的实例化以及插入到DOM过程可以完全由指令创建者控制。例如ng-repeat和ng-if。...Screen Activator: 通过Angular 2,开发人员可以通过一系列can *回调对导航生命周期进行更好的控制。 canActivate:它允许或阻止导航到新的控件。...激活:它会响应导航到新控件的成功事件。 canDeactivate:它将防止或允许跳出旧控制器的导航。 停用:它会响应跳出旧控制器的成功事件。...设计: 所有这些逻辑都是使用管道架构创建的,这使得将自己的操作添加到管道中或删除默认操作变得非常简单。此外,它的异步字符允许开发人员在管道中,实现对用户进行身份验证或加载控件信息的服务器请求。

    8.7K20

    Android新特性介绍,ConstraintLayout完全解析

    如果你不需要它的话,可以选中这个控件,然后按键盘上的Delete键即可删除。 ? 我们可以看到,现在主操作区域内有两个类似于手机屏幕的界面,左边的是预览界面,右边的是蓝图界面。...第二种用于删除某一个控件的所有约束,选中一个控件,然后它的左下角会出现一个删除约束的图标,点击该图标就能删除当前控件的所有约束了,如下所示。 ?...首先点击通知栏中的Guidelines图标可以添加一个垂直或水平方向上的Guideline,这里我们需要的是垂直方向上的。...Autoconnect可以根据我们拖放控件的状态自动判断应该如何添加约束,比如我们将Button放到界面的正中央,那么它的上下左右都会自动地添加上约束,如下图所示。 ?...不过Autoconnect是无法保证百分百准确判断出我们的意图的,如果自动添加的约束并不是你想要的话,还可以在任何时候进行手动修改。总之,可以把它当成一个辅助工具,但不能完全靠它去添加控件的约束。

    1.9K70

    【Python篇】PyQt5 超详细教程——由入门到精通(终篇)

    9.2 创建一个简单的菜单栏 QMainWindow 提供了内置的菜单栏 QMenuBar。你可以在菜单栏中添加 菜单(QMenu) 和 菜单项(QAction)。...9.4 创建状态栏 状态栏(Status Bar)通常位于窗口的底部,用于显示应用程序的状态信息、提示信息或临时消息。PyQt5 提供了 QStatusBar 类,允许你向状态栏添加文本或其他控件。...工具栏(QToolBar)用于提供快速操作的按钮,可以与菜单栏中的功能保持一致。 状态栏(QStatusBar)用于显示当前状态信息或提示信息,还可以添加永久控件。...通过控件的大小策略和布局嵌套,你可以确保界面在不同窗口大小下保持美观和功能性。 写在最后 在这次 PyQt5 学习的过程中,我们从一个基础的 GUI界面开发者逐步成长为能够开发功能齐全应用的进阶者。...这次 PyQt5的学习不仅是对技术的提升,也是对思维的一次锻炼,它教会了我们如何在复杂中找到解决问题的思路,也让我们对未来更加复杂的项目开发充满信心。

    1.5K12

    WPF面试题-来自ChatGPT的解答

    动态资源:动态资源是在代码中动态创建和添加的资源,其值可以在运行时根据应用程序的状态或用户的操作进行修改。动态资源通常通过代码来创建和管理,可以在需要时动态地添加、修改或移除。...()方法创建一个Freezable对象的完全副本,包括所有的属性和子对象。...BindingList在排序和搜索操作上性能较好,但在添加、删除和移动元素时的性能较差。...嵌套关系:ContentControl可以嵌套在其他控件中,作为容器来显示内容。...通过依赖属性,可以实现属性之间的数据流动,当依赖属性的值发生变化时,绑定到它的其他属性或控件也会自动更新。 样式和模板:依赖属性可以与样式和模板一起使用,实现对控件外观和行为的定制。

    44730

    Apriso开发葵花宝典之八Portal Session篇

    Action可以通过以下UI事件调用: 点击屏幕上的按钮或标签 单击/双击业务控件中的特定位置(例如,在Grid控件的一行上) 达到窗体控件上的最大字符数 Action可以: 调用另一个动作 转到另一个屏幕...则可以创建一个带有通配符的Action:”STATUS_TO_%”,而不是创建三个单独的Action。...门户会话变量通常的规则是: l从上述操作或视图表单中使用的控件返回的任何外部输出都会自动添加到当前门户会话中。...) Ø不传递到子门户 lContainer_UI:定义一个用户输入User Input变量 Ø在Screen提交之后被推送到堆栈(带有来自用户的值) Ø返回时恢复(恢复到用户最初输入的值) Ø 不传递到子门户...传递到子门户 Ø当向会话变量添加变量时,后缀“_UI”会自动删除 1、中间变量Immediate Variables 中间变量不会合并到Portal会话中的门户会话变量,因为它们仅在单个屏幕范围内可见。

    20210
    领券