为了账号安全,请及时绑定邮箱和手机立即绑定

Angular:使用 NgIf 删除组件、内部表单和元素?

Angular:使用 NgIf 删除组件、内部表单和元素?

一只甜甜圈 2021-12-23 14:57:06
如何使用 *NgIf 或任何 Ng 函数删除 Dom 元素和组件?我有一个下拉列表;根据下拉菜单,它将显示不同的形式。当人员更改下拉类型然后稍后返回相同的下拉类型时 - 以前的表单数据仍然存在,何时应该清除。当下拉列表更改时删除所有表单、变量和组件本身的最佳方法是什么?见下面的声明,<div class = "addressformtotal">    <div class = "addressblock">        <app-address-formatheader-form></app-address-formatheader-form>        <div *ngIf="formatMessage?.addressFormatDescription.includes('Standard')"><app-address-mailing-standard-form></app-address-mailing-standard-form></div>        <div *ngIf="formatMessage?.addressFormatDescription.includes('Military')"><app-address-mailing-military-form></app-address-mailing-military-form></div>        <div *ngIf="formatMessage?.addressFormatDescription.includes('Post')"><app-address-mailing-pobox-form></app-address-mailing-pobox-form></div>        <div *ngIf="formatMessage?.addressFormatDescription.includes('Free')"><app-address-free-form></app-address-free-form></div>        <div *ngIf="formatMessage?.addressFormatDescription.includes('Rural')"><app-address-mailing-rural-form></app-address-mailing-rural-form></div>        <div *ngIf="formatMessage?.addressFormatDescription.includes('International')"><app-address-mailing-international-form></app-address-mailing-international-form></div>    </div>
查看完整描述

2 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

我认为你的内部组件(app-address-mailing-standard-form、app-address-mailing-military-form...)可以有一个关于 formGroup 和 *ngIf 的 @Input


@Input()group:FormGroup


<form *ngIf="group" [formGroup]="group">

    <input formControlName="prop1">

     ...

</form>

所以,你的 main.app 可以像


<app-address-formatheader-form 

         [group]="form.get("header")>

</app-address-formatheader-form>

<app-address-mailing-standard-form 

         [group]="form.get('mailing')">

</app-address-mailing-standard-form>

<app-address-mailing-standard-form 

         [group]="form.get('military')">

</app-address-mailing-standard-form>

...

所以,如果你的 main.app 创建像


this.form=new FormGroup({

   header:new FormGroup({...}),

   military:new FormGroup({...})

})

只显示“header”和“military”,但这只是一个想法。一切都取决于您创建表单和表单组的方式和位置。


如果您在组件内部创建 fromGroup,请在输入中使用 setter,例如


@Input() set visible(value)

{

    if (visible)

       this.group=new formGroup({...})

}

并且仅将“可见”作为参数传递


<app-address-formatheader-form [visible]="variable"></app-address-formatheader-form>

再次像这样的形式


<form *ngIf="group" [formGroup]="group">

    <input formControlName="prop1">

     ...

</form>


查看完整回答
反对 回复 2021-12-23
?
PIPIONE

TA贡献1829条经验 获得超9个赞

我会说使用反应式形式,以便您可以进行形式重置。这不是双向绑定,因此您可以通过这种方式更好地控制数据。

因此,在下拉列表更改时,ngIf 将创建一个新的响应式表单,其中没有数据。

在此处查看如何创建反应式表单

我对正在发生的事情的猜测是,您绑定了从共享组件(父组件)提供的数据,子组件由于双向绑定而更改,因此保持不变。


查看完整回答
反对 回复 2021-12-23
  • 2 回答
  • 0 关注
  • 198 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信