Встроенные условные выражения Angular 2 (+Dart): оценивается ли второе условие, если первое ложно? Как решить?

Это код в моем component.html (шаблон Angular Dart):

<div *ngIf="selectedOffer!=null && !selectedOffer.isBotenOffer">...</div>

Это исключение, которое я получаю:

ИСКЛЮЧЕНИЕ: NoSuchMethodError: геттер isBotenOffer был вызван при нулевом значении. Получатель: null Попытка вызова: isBotenOffer

selectedOffer иногда бываю null. Но почему оценивается второе утверждение, если первое ложно? И как я могу обойти это лучше всего?


person Blackbam    schedule 06.04.2017    source источник


Ответы (2)


Angular запишет это в сгенерированный файл шаблона:

_NgIf_0_5.ngIf = ((ctx.selectedOffer != null) && !ctx.selectedOffer.isBotenOffer);

Поэтому он не должен оценивать selectedOffer.isBotenOffer, если selectedOffer равно null. Однако вы можете столкнуться с ошибкой, которая была только что исправлена ​​в dart2js: https://github.com/dart-lang/sdk/commit/fe7baee84828e109a49920c2572f3917e5ff8ca5

Вы можете столкнуться с этой проблемой, если вы устанавливаете selectedOffer в конструкторе вашего компонента, но выполняете ранний возврат в конструкторе.

person Harry Terkelsen    schedule 06.04.2017

Нет, с && оценка короткого замыкания прекращает оценку 2-й части, когда первая равна false - так же, как в обычном коде Dart.

person Günter Zöchbauer    schedule 06.04.2017