Не показывать ничего, если ноль (JS) - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть компонент, где я показываю данные, полученные от серверной части.

Вот функция для отображения данных

 getData() {
    this.propertyService.getPropertyForEdit(Number(this.activatedRoute.snapshot.params['id'])).subscribe(r => {
        this.property = r;
        this.tabTemplates = [
            { title: this.l('Addresses'), template: this.addressesTemplateRef },
            { title: this.l('Site'), template: this.siteTemplateRef}
        ];
        this.propertiesToDisplay = [
            { displayName: this.l('PropertyTitle'), value: this.property.propertyTitle.name},
            { displayName: this.l('Landlord'), value: this.property.landlord.name},
            { displayName: this.l('Agent'), value: this.property.agent.name },
            { displayName: this.l('BuildingType'), value: this.property.buildingType.name }
        ];
    });
}

В этой строке value: this.property.landlord.name} значение может быть нулевым.

Так что, когда он нулевой, у меня есть ошибка

Невозможно прочитать свойство 'name' из неопределенного

Как я могу это исправить?

Ответы [ 4 ]

3 голосов
/ 17 апреля 2019

Поэтому, когда оно равно NULL, у меня появляется ошибка

Невозможно прочитать свойство 'имя' из неопределенного

Нет, это не null, это undefined,который отличается.

Ошибка выдается, потому что this.property.landlord равен undefined.В javascript при попытке получить доступ к свойству (в данном случае name) undefined выбрасывает TypeError , в соответствии с дизайном.

Для решения проблемы (которая не является проблемой,скорее случай), вы должны использовать fallbacks , чтобы проверить, существуют ли предки свойства.В этом случае я бы обработал это следующим образом:

{ displayName: this.l('Landlord'), value: (this.property && this.property.landlord && this.property.landlord.name) ? this.property.landlord.name : 'N/A'},

Этот фрагмент кода конкретно:

this.property && this.property.landlord && this.property.landlord.name

будет утверждать, что существует каждый предок name.Если что-то из этого не произойдет, он вернет «N / A» без каких-либо исключений.

2 голосов
/ 17 апреля 2019

Используйте троичный оператор:

value: (this.property.landlord ? this.property.landlord.name : "defaultValue")
2 голосов
/ 17 апреля 2019

Проблема в том, что собственность арендодателя составляет null(undefined). Вы можете напрямую обработать проверку null, используя троичные операторы.

value: (this.property.landlord) ? this.property.landlord.name : null

1 голос
/ 17 апреля 2019

Используйте троичное условие при назначении значения.Как это

{ displayName: this.l('PropertyTitle'), value: (this.property.propertyTitle.name) ? this.property.propertyTitle.name: null},
...