如何在 Angular 2 中使用 ngModel 过滤空值?

Posted

技术标签:

【中文标题】如何在 Angular 2 中使用 ngModel 过滤空值?【英文标题】:How to filter null value using ngModel in Angular 2? 【发布时间】:2017-05-31 10:58:22 【问题描述】:

流程:

    用户提交包含一些数据的表单,用户未填写的一些可选字段在 mongo 中保存为“null”。 稍后,用户决定编辑该表单。 服务抓取表单并将其显示给用户。 表单输入框显示为“null”,因为在第 1 步中他没有填写它们。

所以,我创建了一个管道:

import Pipe, PipeTransform from '@angular/core';

@Pipe(
name: 'transformNull'
 )

export class TransformNull implements PipeTransform 

transform(value) 
if (value == null) 
  return null;
 

然后,我尝试在 html 中分解 ngModel:

[ngModel]="user.extraInfo | transformNull" (ngModelChange)="user.extraInfo.value=$event"

这导致了这个错误:

Cannot set property 'value' of undefined TypeError: Cannot set property 'value' of undefined

我尝试使用 *ngIf="isDataAvailable" 延迟页面加载,错误消失了,用户可以保存表单,值被存储到 mongo 但是刷新页面时,输入框为空。

然后我删除了 *ngIf,添加了 elvis 运算符,但值错误又回来了。

我正在使用 zone.js v0.7.4,尝试使用 0.7.2 和 0.7.5 但没有运气。

我在这里错过了什么?

【问题讨论】:

你检查***.com/questions/36016407/…了吗? 怎么样:(ngModelChange)="user.extraInfo = $event" 请移除你的管道“transformNull” @SaeedPy 移除管道,更改您提到的部分,输入框中仍然为空。 我将if (value == null) 更改为if(value === 'null') 并在管道中添加了else return value。然后我在 html 中使用了它:[ngModel]="user.extraInfo | transformNull" (ngModelChange)="user.extraInfo.value = $event",它起作用了。我现在在路由器上使用解析器,组件在数据到达后加载。 【参考方案1】:

ngModel需要拆分成

[ngModel]="user?.extraInfo " (ngModelChange)="user.extraInfo = $event"

【讨论】:

我遇到了一个异常,因为我的绑定目标为空。但多亏了您的提议,它现在可以完美运行了。

以上是关于如何在 Angular 2 中使用 ngModel 过滤空值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular 2 中使用 ngModel 过滤空值?

如何在 Angular 2 的 [(ngModel)] 中获取数字? [复制]

Angular 2 - NgFor 中与 NgModel 的 2 路绑定

Angular 2:如何将 JavaScript 日期对象与 NgModel 两种方式绑定一起使用

Angular 2:如何将 JavaScript 日期对象与 NgModel 两种方式绑定一起使用

如何在 Angular 6 中使用 Material 将 mat-chip 绑定到 ngmodel