2017-01-16 6 views
1

потока:Как фильтровать нулевое значение с помощью ngModel в Angular 2?

  1. Пользователь отправляет форму с некоторыми данными, некоторые дополнительные поля, которые пользователь не заполняющие сохраняются в Монго как «нуль».
  2. Позже пользователь решает изменить эту форму.
  3. Служба захватывает форму и отображает ее пользователю.
  4. В поле ввода формы отображается «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, но не повезло.

Что мне здесь не хватает?

+0

Вы проверили https://stackoverflow.com/questions/36016407/two-way-binding-with-elvis-operator/36016472#comment70500052_36016472? – echonax

+0

как насчет: (ngModelChange) = "user.extraInfo = $ event" и удалите свою трубу "transformNull" –

+0

@SaeedPy удалили трубку, измените часть, которую вы упомянули, все еще null в поле ввода. –

ответ

2

С ngModel она должна быть разделена на

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

попробовал и по-прежнему возвращает null. –

+0

У меня было исключение, потому что мой привязанный привязкой был нулевым. Но благодаря вашему предложению, он отлично работает сейчас. – peter70