iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Angular中如何使用FormArray和模态框
  • 490
分享到

Angular中如何使用FormArray和模态框

2023-07-04 20:07:51 490人浏览 薄情痞子
摘要

本篇内容介绍了“angular中如何使用FORMArray和模态框”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!业务场景使用FormArra

本篇内容介绍了“angular中如何使用FORMArray和模态框”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

业务场景

使用FormArray制作动态表单。每创建一个表单,页面就新增一个input显示表单填写的标题,点击编辑再跳转到点击表单的填写内容。

    // 封装获取modelList    get modelList() {        return this.formGroup.get('modelList') as FormArray    }    constructor(private fb: FormBuilder) {}    nGonInit() {        // 一开始初始化arr为空数组        this.formGroup = this.fb.group({            // 内部嵌套FormControl、FormArray、FormGroup            modelList: this.fb.array([])        })    }    // 模态框构造内部的表单    function newModel() {        return this.fb.group({            modelName: [''],            // 可以继续嵌套下去,根据业务需求        })    }    // 省略模态框部分代码    // 传递到模态框的FormArray    selectedType: FormArray

表单列表

Angular中如何使用FormArray和模态框

表单详情【模态框】

Angular中如何使用FormArray和模态框

<form [FormGroup]="formGroup">    <div FormArrayName="modelList">        <ng-container *nfFor="let item of modelList.controls;let i = index" [FormGroupName]="i">            <nz-input-group                [nzSuffix]="suffixIconSearch"              >                <input type="text" nz-input formControlName="modelName"/>              </nz-input-group>              <ng-template #suffixIconSearch>                <span                  nz-icon                  nzType="edit"                  class="hover"                  (click)="showModal(i)"                ></span>              </ng-template>        </ng-container>    </div></form><nz-modal  [(nzVisible)]="isVisible"  nzTitle="Model"  [nzFooter]="modalFooter"  (nzOnCancel)="handleCancel()"  (nzOnOk)="handleOk()">  <ng-container *nzModalContent>    <form nz-form [formGroup]="selectedType">      <nz-form-item>        <nz-form-label nzRequired>Model Test</nz-form-label>        <nz-form-control>          <input            type="text"            nz-input            placeholder="请输入ModelName"            formControlName="modelName"          />        </nz-form-control>      </nz-form-item>      <nz-form-item>        <nz-form-control>          <product-config></product-config>        </nz-form-control>      </nz-form-item>    </form>  </ng-container>  <ng-template #modalFooter>    <button *ngIf="!isNewModel" nzDanger nz-button nzType="default" (click)="handleDelete()">删除</button>    <button *ngIf="isNewModel" nz-button nzType="default" (click)="handleCancel()">取消</button>    <button nz-button nzType="primary" (click)="handleOk()">保存</button>  </ng-template></nz-modal>

由于这种模态框比较特殊,割裂了表单的FormGroup之间的关系,在点击的时候需要传递参数到模态框显示部分值,如果单纯传递参数使用this.modelList.at(index)获取实体到模态框上进行赋值修改,在模态框点击保存后会发现修改的值没有在表单更新,而表单上对input值修改发现可以影响到模态框的内容。

但是模态框新增的表单却可以响应到页面中去。

原错误代码思路

  • 点击编辑后,将点击的FormArray的元素传递给一个临时变量 this.selectedType = <FormGroup>this.modelList.at(index);,并且对模态框表单传值。

  • 模态框点击保存再将原FormArray的值重新替换

this.modelList.removeAt(this.modelIndex)this.modelList.insert(this.modelIndex, this.selectedType)


  • 点击新增,创建一个新的FormGroup对象

  • 保存添加push到原页面的FormArray中

newModelType(): FormGroup {    return this.fb.group({      modelName: ['', Validators.required],      configList: this.fb.array([]),    });  }// ...省略// 模态框显示show() {    this.isVisible = true    this.selectedType = this.newModelType();}// 保存save() {    this.isVisible = false    // 原页面FormArray    this.modelList.push(this.selectedType);}

最后发现这种写法只能够单向改变,页面外input修改值会影响到模态框,但是模态框的值改变保存却让外部没有更新。通过console方式查看页面的FormArray内部参数发现其实是有改变的,只是angular没有检测到。这个时候判断没有发生响应的原因一般是没有触发angular检测机制,仔细查看文档发现有一行很重要 angular文档在最下面写着

Angular中如何使用FormArray和模态框

原本第一次阅读的时候,觉得我遵守了这种原则,因为在编辑的时候,我选择了操控原FormArray进行元素删除和插入,是遵循了这种规则,但是实际上在模态框赋值就已经违反了这种原则,我在赋值的时候拿了FormArray的元素实例赋值给模态框的临时变量,然后更改实例的值,又重新删除插入,本质上我操作的是同一个实例,所以angular没有检测到发生变化【虽然值发生改变】

Angular中如何使用FormArray和模态框

所以正确的做法是啥??

在赋值的地方不能偷懒,仍然要重新创建新对象,再拿原对象的赋值。【相当于深拷贝】

      this.selectedType = this.newModelType();      const old = this.modelList.at(index);      this.selectedType.setValue({        'modelName': old.get('modelName').value    })

这时候就可以正常更新了。

“Angular中如何使用FormArray和模态框”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Angular中如何使用FormArray和模态框

本文链接: https://www.lsjlt.com/news/347294.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Angular中如何使用FormArray和模态框
    本篇内容介绍了“Angular中如何使用FormArray和模态框”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!业务场景使用FormArra...
    99+
    2023-07-04
  • 浅析Angular中怎么结合使用FormArray和模态框
    怎么结合使用FormArray和模态框?下面本篇文章给大家介绍一下Angular的FormArray和模态框结合使用的方法,希望对大家有所帮助!业务场景使用FormArray制作动态表单。每创建一个表单,页面就新增一个input显示表单填写...
    99+
    2023-05-14
    Angular.js
  • Angular的FormArray和模态框结合使用实例详解
    目录业务场景表单列表表单详情【模态框】原错误代码思路所以正确的做法是啥??总结业务场景 使用FormArray制作动态表单。每创建一个表单,页面就新增一个input显示表单填写的标题...
    99+
    2022-11-13
    Angular FormArray模态框 Angular FormArray
  • Bootstrap中如何使用模态框
    这篇文章主要介绍了Bootstrap中如何使用模态框,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1 Bootstrap5模态弹框工作原理使...
    99+
    2024-04-02
  • 如何使用angular框架
    这篇文章给大家分享的是有关如何使用angular框架的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。简介关于service worker,网络上已经有了较多的文章。总的来说它依靠缓...
    99+
    2024-04-02
  • Angular中如何使用HttpClientModule模块
    这篇文章主要介绍Angular中如何使用HttpClientModule模块,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!该模块用于发送 Http 请求,用于发送请求的方法都返回 O...
    99+
    2024-04-02
  • 如何使用HTML5和CSS3制作一个模态框
    小编给大家分享一下如何使用HTML5和CSS3制作一个模态框,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!源码示例可能你并不想看我下面的一堆冗长的说明,想直接查看...
    99+
    2023-06-09
  • Angular中如何使用ngrx做状态管理
    小编给大家分享一下Angular中如何使用ngrx做状态管理,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!ngrx/store的灵感来源于Redux,是一款集成R...
    99+
    2023-06-06
  • BootStrap如何实现动态模态框及静态模态框
    这篇文章主要为大家展示了“BootStrap如何实现动态模态框及静态模态框”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“BootStrap如何实现动态模态框及静...
    99+
    2024-04-02
  • Angular中ngClass和ngStyle如何使用
    这篇文章主要讲解了“Angular中ngClass和ngStyle如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Angular中ngClass和ngStyle如何使用”吧!项目场景:...
    99+
    2023-07-04
  • bootstrap中怎么使用模态框
    小编给大家分享一下bootstrap中怎么使用模态框,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!工作中有需要用到模态框的可以看...
    99+
    2024-04-02
  • angular的HttpClientModule模块如何使用
    这篇文章主要介绍“angular的HttpClientModule模块如何使用”,在日常操作中,相信很多人在angular的HttpClientModule模块如何使用问题上存在疑惑,小编查阅了各式资料,整...
    99+
    2024-04-02
  • BootStrap中如何实现模态框
    这篇文章主要介绍BootStrap中如何实现模态框,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!bootstrap的弹出层bootstrap弹出层有多种触发方式,以下是我用到的几种方...
    99+
    2024-04-02
  • bootstrap中modal模态框如何实现动态添加modal框和弹出多个modal框
    小编给大家分享一下bootstrap中modal模态框如何实现动态添加modal框和弹出多个modal框,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让...
    99+
    2024-04-02
  • AmazeUI在模态框中嵌入表单如何形成模态输入框
    这篇文章将为大家详细讲解有关AmazeUI在模态框中嵌入表单如何形成模态输入框,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。效果图首先同样是HTML布局:<!--使用HTML5开发--><...
    99+
    2023-06-09
  • 微信小程序如何实现弹框和模态框
    小编给大家分享一下微信小程序如何实现弹框和模态框,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!微信小程序 弹框和模态框实现代码实...
    99+
    2024-04-02
  • 如何实现Ratchet模态框
    这篇文章主要介绍如何实现Ratchet模态框,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!模态框在任何一个系统的布局里面都是很重要的东西。其实个人觉得直接一个alert()更好,但现在很多人觉得alert()的弹出框...
    99+
    2023-06-09
  • Vue如何实现模态框
    这篇文章给大家分享的是有关Vue如何实现模态框的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。项目基础工程文件是使用vue-cli3.0搭建的,这里不过多介绍。开发Vue组件系列之...
    99+
    2024-04-02
  • 如何使用HTML和CSS创建一个响应式模态框布局
    在现代网页设计中,模态框(Modal Box)是一个常见的元素,用于在网页上显示额外的内容,如提示、登录框、图片展示等。在本篇文章中,我们将学习如何使用HTML和CSS创建一个响应式的模态框布局,并提供具体的代码示例。首先,我们需要创建一个...
    99+
    2023-10-21
    CSS html 响应式布局
  • 如何在Unity3D中使用单例模式和静态类
    本篇文章为大家展示了如何在Unity3D中使用单例模式和静态类,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。静态类不能继承和被继承!(严格点说是只能继承System.Object)也就是说你的静态类...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作