如何在 ng-template 中使用反应式表单

2024-04-15

我刚刚开始使用 Angular 4,我需要开发一个 CRUD 网格,用户可以在其中添加、编辑或删除行。

在我的研究过程中,我发现这篇文章展示了如何创建网格以及操作:具有 CRUD 操作的 Angular 4 Grid http://www.dotnetcurry.com/angularjs/1380/angular-4-grid-crud.

看看他的代码,引起我注意的是他使用 ng-template 在编辑/查看模式之间切换的方式。

<tr *ngFor="let emp of EMPLOYEES;let i=idx">
 <ng-template [ngTemplateOutlet]="loadTemplate(emp)" [ngOutletContext]="{ $implicit: emp, idx: i }"></ng-template>
</tr>

在文章中,他使用模板驱动的表单来编辑行。然而,我试图改变为反应形式。

在尝试执行此操作时,我尝试将 [(ngModel)] 替换为 formControlName,但出现了一些错误。我的第一次尝试是在表单元素内的模板 html 的开头添加 [formGroup]。但是当我尝试运行并编辑该行时,出现以下错误:

Error: formControlName must be used with a parent formGroup directive.  You'll want to add a formGroup directive and pass it an existing FormGroup instance (you can create one in your class).

当我尝试将 [formGroup] 移动到 ng-template 内时,它可以工作,但是我无法将值绑定到字段,我必须在 loadTemplate 函数中设置值:

loadTemplate(emp: Employee) {
    if (this.selemp && this.selemp.id === emp.id) {

        this.rForm.setValue({
            id: emp.id,
            name: emp.name
        });

        return this.editTemplate;
    } else {
        return this.readOnlyTemplate;
    }
}

这可以工作并以只读模式显示字段内的值:(

这里是Plunker https://plnkr.co/edit/KC8n3FN02KIhvblWztxP?p=preview到目前为止我所得到的。

如何使反应式表单与 ng-template 一起使用以及如何设置值来编辑条目?

任何帮助表示赞赏!谢谢


实际上您的表单不是只读的,您只是不断地覆盖您输入的输入。由于您在模板中进行了方法调用(这通常不是一个好主意),loadTemplate每当发生变化时就会被调用,这反过来意味着

this.rForm.setValue({
   id: emp.id,
   name: emp.name
});

每当您尝试输入任何内容时,都会被一遍又一遍地调用。我们可以通过在单击编辑时设置表单值来克服这个问题。这里我们还存储索引,以便我们可以使用它在数组中的正确位置设置修改后的值,利用索引也许可以以更智能的方式完成,但这是实现我们想要的快速解决方案。

editEmployee(emp: Employee) {
    this.index = this.EMPLOYEES.indexOf(emp) 
    this.selemp = emp;
    this.rForm.setValue({
      id: emp.id,
      name: emp.name
    });
}

所以当我们点击保存时,我们使用该索引......

saveEmp(formValues) {
  this.EMPLOYEES[this.index] = formValues;
  this.selemp = null;
    this.rForm.setValue({
      id: '',
      name: ''
    });

}

你的笨蛋:https://plnkr.co/edit/6QyPmqsbUd6gzi2RhgPp?p=preview https://plnkr.co/edit/6QyPmqsbUd6gzi2RhgPp?p=preview

但请注意...

我建议你也许重新考虑这个想法,有方法loadTemplate在模板中,将导致此方法触发过多。你可以在plunker中看到,我们控制台日志fired!每当它被发射时,所以它很多!根据具体情况,这可能会导致严重的性能问题,因此请记住这一点:)

附言。对代码进行了一些其他更改,以添加新员工以正常工作(与问题无关)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 ng-template 中使用反应式表单 的相关文章

  • 用隐藏单元格补充 colspanned 表格有什么不好吗?

    我一直在表格上开发一些排序和选择功能 我发现在具有跨单元格的表格中定位非常困难 我只是添加了跨区单元格并将其隐藏 它看起来不错 它与我的 js 一起工作 非常适合索引 但我想知道这是否是合法的方法 stuffing display none
  • 非 DOM 对象上的 jQuery 自定义事件

    我最近阅读了一些代码 其功能如下 bob name Bob Smith rank 7 bob bind nameChanged function bob trigger nameChanged 这似乎有效 但我在 jQuery 文档或源代码
  • 消息“在 jest.setTimeout 指定的 5000 毫秒超时内未调用异步回调”

    我正在使用 Puppeteer 和 Jest 来运行一些前端测试 我的测试如下 describe Profile Tab Exists and Clickable settings user gt test Assert that you
  • Jquery从下拉列表中获取所选值的id

    我有一个下拉列表 可以从数据库获取值 如下所示 get getJobs function jobs seljobs jobs var i 0 jobs forEach function n alert job id n id 32 67 4
  • 动画进度元素值

    我有一个progress元素 该元素如下所示 div class container div div div
  • Leaflet js虚构地图

    我是 Leaflet 的新手 我想了解如何创建完全交互式的虚构地图 我有一张图像想要转换为传单地图 该图像基本上像图表一样具有许多连接和点 我想首先将该图像转换为地图 能够将鼠标悬停在这些点上 突出显示它们并显示有关它们的信息 并且还可以在
  • jquery window.open 在 ajax 成功中被阻止

    尝试在我的 ajax 成功调用中打开一个新的浏览器窗口 但是 它被阻止为弹出窗口 我做了一些搜索 发现用户事件需要绑定到 window open 才能避免这种情况发生 我还找到了这个解决方案 您可以在 ajax 之前打开一个空白窗口 然后在
  • 是否可以使用 javascript 测试用户的浏览器/操作系统是否支持给定类型的链接?

    是否可以使用 javascript 或其他任何东西 测试用户的操作系统 浏览器是否支持给定的 url 方案 例如 大多数仅使用网络邮件的用户计算机上未设置 mailto 是否有可能以某种方式捕获单击 mailto 链接的尝试并弹出比浏览器错
  • HTML2canvas 和 Canvas2image,下载的屏幕截图不显示我的 HTML 图像

    我一直在开发一个 HTML 页面 我想将其转换为图像 我一直在使用 html2canvas 和 canvas2image 脚本并采用此代码http jsfiddle net 8ypxW 3 http jsfiddle net 8ypxW 3
  • 如何使 Angular2 Service 单例?

    我正在尝试在我的应用程序中实现身份验证防护 IE 只有经过身份验证的用户才能访问我的应用程序的某些路由 我正在遵循给出的意见here https angular io docs ts latest guide router html 用户登
  • JavaScript 中数组的 HTML 数据列表值

    我有一个简单的程序 它必须从服务器上的文本文件中获取值 然后将数据列表填充为输入文本字段中的选择 为此 我想要采取的第一步是我想知道如何动态地将 JavaScript 数组用作数据列表选项 我的代码是
  • Javascript - 将值从下拉框传递到 Google Maps API

    我正在使用 Google 地图 API 为一家出租车公司创建报价表 目前 用户在 2 个文本框中输入出发点和接载点 API 会计算两点之间的距离以及行程费用 我正在尝试添加两个具有设定位置的下拉框 以便用户可以选择这些位置之一或使用文本框输
  • 在d3.js中将2D形状转换为3D,并根据ANGULAR中的值调整高度

    我正在使用 d3 js v6 创建以下 2D 图表表示的 3D 图表 这个圆圈中有多个正方形 每个正方形都根据值分配了一种颜色 值越大 正方形越暗 现在我想将其转换为 3D 形状 其中当值变高时 只有特定正方形的高度会增加 因此结果在某种程
  • 淡出和循环一组 div 的最佳方式

    假设我有以下 div div class a You are funny div div class b You are smart div div class c You are cool div 最好的展示方式是什么div a持续 5
  • 查询为空 Node Js Sequelize

    我正在尝试更新 Node js 应用程序中的数据 我和邮递员测试过 我的开发步骤是 从数据库 MySQL 获取ID为10的数据进行更新 gt gt 未处理的拒绝SequelizeDatabaseError 查询为空 我认识到 我使用了错误的
  • 当用户单击链接时,如何记录 MixPanel 事件?

    当用户单击某种类型的链接时 我试图在 MixPanel 中记录一个事件 我正在使用 JQuery 不引人注意地完成此操作 据我所知 我需要添加一个回调函数 以便在记录事件后将用户带到 URL 这是我正在使用的代码 不幸的是
  • JavaScript 代码在不使用 ActiveX 的情况下截取网站屏幕截图

    我有一个用户与之交互的 JavaScript 应用程序 我需要保存当前界面的外观 裁剪出我需要的部分 或者通过指定div只拍摄我需要的部分 然后发送回服务器 显然任何外部服务都无法做到这一点 我需要一个 JavaScript 或Flash
  • 使用异步调用时如何从 javascript 更新元刷新?

    我有一个系统 它使用元刷新来注销页面 该系统会在空闲用户后进行清理 不用担心 服务器也会导致会话超时 我开始通过 ajax 进行一些操作 不是真正的 xml 但这不是重点 我可以运行从异步请求返回的javascript 所以我想知道是否可以
  • 如何在打字稿文件中导入没有定义文件的js库

    随着我们的项目变得越来越大 我想从 JavaScript 切换到 TypeScript 以帮助进行代码管理 然而 我们使用许多库作为 amd 模块 我们不想将其转换为 TypeScript 我们仍然想将它们导入 TypeScript 文件
  • 在 GWT 中,在任何主机页标记上添加事件处理程序

    我想为任何标签添加 MouseOver 事件处理程序 举个例子 我想为旧版 HTML 页面中的每个锚点页面添加事件处理程序 继GWT指南 http code google com webtoolkit doc 1 6 DevGuideUse

随机推荐

  • 使用马哈拉诺比斯距离进行多变量离群值去除

    我的数据有异常值 我怎样才能找到马哈拉诺比斯距离 并用它来删除异常值 首先让我提出一些一般准则 实际上 如果你有很多特征和较少的样本 马哈拉诺比斯算法往往会给出误导性的结果 你可以自己尝试一下 所以你拥有的特征越多 你应该提供的样本就越多
  • 埃拉托色尼真筛——用于生成素数的算法

    今天读到一篇论文 奥尼尔 梅丽莎 E 正版 埃拉托斯特尼筛法 http www cs hmc edu oneill papers Sieve JFP pdf杂志 函数式编程 已出版 剑桥大学出版社在线 2008 年 10 月 9 日 doi
  • Spring Social NoSuchMethodError SocialAuthenticationFilter.getFilterProcessesUrl()

    我使用Spring Security登录 现在我正在尝试添加 spring 社交 facebook 登录 但我收到很多错误信息 首先 当我尝试使用相同的方法时春季社交指南 http spring io guides gs accessing
  • Hibernate 4.3.5 不适用于 Oracle10g 数据库

    我正在尝试使用 Hibernate 4 3 5 和 Oracle 数据库 但在运行过程中我遇到了以下问题 相同的代码在 MySQl 数据库中运行良好 org hibernate engine jdbc connections interna
  • Java 中 C# ObservableCollection 的等效项

    我想知道是否存在一种数据结构 其行为类似于 ObservableCollection 几乎就像 C 中一样 能够采用某种类型 ex 在 C 中我可以说 ObservableCollection
  • 通过浏览器链接在代码中连接 teamviewer

    我有一个问题让我抓狂 我已经成功地将我的 teamviewer 会话从浏览器 uri 连接到我所需的远程资源 我通过在浏览器地址栏中使用以下 uri 命令来实现此目的 实际上 这是 html 中的按钮单击 teamviewer8 remot
  • SPARK SQL 中的相关子查询列不允许作为非相等谓词的一部分

    我正在尝试在 where 子句中编写一个子查询 如下所示 但我越来越 非等式谓词中不允许有相关列 SELECT holidays FROM SELECT s holidays s entity FROM transit t tt WHERE
  • Angular bootstrap ui 模式使用相同的控制器而不是新的控制器

    我正在使用 Angular Bootstrap ui 模态框 它说要为新控制器提供一个新的 modalInstance 我想使用与初始化模态框相同的控制器 我搜索但没有成功 我找到了此链接 但没有成功 如何在 Angular UI Boot
  • 使用 Linq 将列表框项值转换为 int

    我使用列表框显示数据库中表的内容 每个列表框项目都使用设置为友好名称的 Text 属性和设置为唯一 ID 列的 Value 属性进行填充 数据库结构可能类似于以下内容 CREATE TABLE GENERIC FRIENDLY NAME T
  • 独立于 Rails 在 HAML 文件中使用布局

    我的最终目标是创建几个静态 HTML 文件以交给其他人 但对于我的工作流程 我希望将 HAML 作为基本源文件 在这样做时 我希望至少在我这边能够干燥这个过程 现在我有很多页面最终将共享一个通用布局 我想知道如何合并这些布局 这是我当前的代
  • 在没有缓冲区的情况下将数据从 fstream 复制到 stringstream?

    无论如何 我可以从fstream 一个文件 到一个stringstream 内存中的流 目前 我正在使用缓冲区 但这需要双倍的内存 因为您需要将数据复制到缓冲区 然后将缓冲区复制到字符串流 直到删除缓冲区为止 数据都会在内存中复制 std
  • 使用 PHP SSH 连接到远程服务器

    我想做一个SSH使用 php 连接到远程服务器 我在 Linux CEntOS 上使用 php 5 3 到目前为止我所做的 connection ssh2 connect 192 168 1 22 22 ssh2 auth password
  • 使用 foreach 迭代对象列表

    我看到这样的说法 当在对象列表上使用 foreach 时 迭代的对象实例is not可编辑 但对象属性are可编辑 有人可以用一个简单的例子来演示上述内容吗 让我重新表述一下 因为我发现了两个版本的说法 也许这个说法更清楚 当对元素列表使用
  • .Net Core动态dbContext

    我有两个 DbContext 共享同一个存储库 以下是我现有的代码 启动 cs services AddDbContext
  • redshift 上 array_agg() 或 string_agg() 的替代方案

    我正在使用此查询来获取聚合结果 select bs string agg wbns from bag group by 1 我收到此错误 运行查询时出错 函数 string agg 字符变化 未知 不存在提示 没有函数与给定的名称和参数匹配
  • Hibernate/JPA中涉及继承时如何指定列名?

    我想我想在这里鱼和熊掌兼得 但我们会看看是否有一个合理的解决方案来满足我正在寻找的问题 我有一个 Spring Boot JPA Hibernate 应用程序 它将与 MySQL 作为其后备存储进行通信 我有几种情况 从 OOP 的角度来看
  • 带有问号的奇怪 C# 语法

    private enum E Week Mon 0 Tue 下面的代码是什么意思 E Week week null 是否等于下面的代码 的作用是什么 在这里签名 E Week week null 您的代码正在使用所谓的可空类型 http m
  • 在Python中查找模块的路径而不导入

    我见过几种通过首先导入模块来查找模块路径的方法 有没有办法在不导入模块的情况下做到这一点 Using pkgutil http docs python org library pkgutil html module gt gt gt imp
  • Java字符串内部表示

    我知道Java对String的内部表示是UTF 16 什么是java字符串表示 https stackoverflow com questions 9699071 what is the javas internal representio
  • 如何在 ng-template 中使用反应式表单

    我刚刚开始使用 Angular 4 我需要开发一个 CRUD 网格 用户可以在其中添加 编辑或删除行 在我的研究过程中 我发现这篇文章展示了如何创建网格以及操作 具有 CRUD 操作的 Angular 4 Grid http www dot