#angular #typescript
#angular #typescript
Вопрос:
У меня есть свойство ввода внутри компонента:
@Input() mailbarcode: string;
Затем я вызываю службу:
ngOnInit(): void {
this.trackMailingObs = this.documentCardRepository.getMailing(this.mailbarcode);
}
Проблема mailbarcode
иногда undefined
или null
, следовательно getMailing()
, сбой. Как это исправить?
Да, я могу это сделать:
if (this.mailbarcode) this.trackMailingObs = this.documentCardRepository.getMailing(this.mailbarcode);
Комментарии:
1. Итак, если вы уже нашли ответ самостоятельно, в чем собственно вопрос?
2. Как это сделать с помощью rxjs, я обновил свой вопрос
Ответ №1:
Правильным подходом было бы использовать onChanges . Из документов:
Вызывается перед ngOnInit() и всякий раз, когда изменяется одно или несколько входных свойств, связанных с данными.
Чтобы проверить, присутствует ли входное значение, прежде чем продолжить, внесите следующее изменение:
@Input() mailbarcode: string;
ngOnChanges(changes: SimpleChanges) {
if (changes.mailbarcode.currentValue) {
this.trackMailingObs = this.documentCardRepository.getMailing(this.mailbarcode);
}
}
Комментарии:
1. Почему нет в ngInit?
2. Как обрабатывать изменения.почтовый штрих-код? Просто проверьте
if (changes.mailbarcode)
службу вызовов?3. Правильно ли это?
ngOnChanges(changes: SimpleChanges) { if (changes.mailbarcode) this.trackMailingObs = this.documentCardRepository.getMailing(this.mailbarcode); }
?
Ответ №2:
если вы уверены, что для ввода необходимо нажать в компоненте, который вы можете добавить *ngIf
к родительскому, а затем к повторному, только если присутствует