Есть ли ? («безопасный оператор») альтернатива в Typescript для работы с нулевыми значениями? - PullRequest
0 голосов
/ 22 мая 2019

В моем приложении Angular я пытаюсь показать / скрыть div, используя ngIf.

Ниже мой HTML:

<div *ngIf="damageReportToPolice()">
</div>

А вот мой машинопись:

public damageReportToPolice(): boolean {      
 if(this.damageDetailsTwoForm['controls'].injuryTypeGp['controls'].injuryType.value.value === 'Burglary in the car') {
          return true;
        } else {
          return false;
        }
      }

Это работает нормально, когда страница загружается, и когда условие истинно, отображается div.

Но, когда я reset() форма, я получаю следующую ошибку:

Невозможно прочитать свойство 'value' из null

Когда у меня было это условие в моем HTML, я смог использовать ? в качестве безопасного оператора, например так:

damageDetailsTwoForm['controls'].injuryTypeGp.controls.injuryType?.value?.value === 'Burglary in the car'

Но я не могу найти альтернативу этому машинописи.

Может кто-нибудь сказать, пожалуйста, есть ли безопасный оператор , который я могу использовать?Или как мне обойти эту проблему?

Заранее большое спасибо!

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Просто из любопытства это называется оператор Элвиса (Ссылка на Kotlin), а также предложение javascript , которое может появиться в следующих спецификациях ES. Нет короткого решения для машинописного текста / javascript, если вы не хотите связывать его, как

injuryType && injuryType.value && injuryType.value.value

тогда вы можете просто создать функцию, которая возвращает null в случае исключения:

export function safeNavigation(cb) {
  try {
    return cb();
  } catch (error) {
    return null;
  }
};




// In the component...
if (safeNavigation(() => injuryType.value.value) === 'Burglary in the car') {
...

PS. Если это не вызывает конфликтов, я бы хотел переименовать его в _ и использовать как _(() => path.to.navigate)

0 голосов
/ 22 мая 2019

Я думаю, вам следует изменить код шаблона на этот

damageDetailsTwoForm.get('injuryType')?.value?

Или более чистый способ, как это

  <form (ngSubmit)="onSubmit(registerForm)" #registerForm="ngForm">
    <div class="form-group">
      <label for="UserName">Your email</label>
      <input
        type="text"
        ngModel
        class="form-control"
        id="UserName"
        name="UserName"
        required
      />
      <div
        *ngIf="
          registerForm.controls.UserName?.errors?.required &&
          registerForm.controls.UserName?.touched
        "
        class="alert alert-danger"
      >
        Email is required
      </div>
    </div>

Таким образом, чтобы проверить ноль в вашем машинописном тексте, вы можете проверить только по

if(something) {
 // do something
}
...