Я использую Angular 5 с Angular CLI 1.6.8. В одном из моих шаблонов у меня есть следующая разметка, которая отлично работает с ng serve, но не работает с ng build:
<div [ngSwitch] = "amazonReportResultType">
<div *ngSwitchCase = "'AmazonReportEarningsByProductResponse'">
<app-amazon-earnings-by-product-view [salesReport] = "amazonReportResult"></app-amazon-earnings-by-product-view>
</div>
<div *ngSwitchCase = "'AmazonReportEarningsByPlatformResponse'">
<app-amazon-earnings-by-platform-view [salesReport] = "amazonReportResult"></app-amazon-earnings-by-platform-view>
</div>
</div>
Остальная часть моего приложения работает нормально после сборки. Моя команда сборки такова:
ng build --prod --env=prod --build-optimizer --sourcemaps
Когда я проверяю DOM, в том месте, где я должен видеть выходные данные переключателя, я вижу пустой комментарий. Почему это происходит и есть ли обходной путь?
Спасибо.
Вы получаете amazonReportResultType в асинхронном режиме?





Хорошо, я нашел проблему, и она не была связана с ngSwitch. Проблема заключалась в том, что я получал значение amazonReportResultType, глядя на amazonReportResult.constructor.name, и этот метод не работает с плагином uglifyJS, который использует angular cli. Я решил эту проблему, добавив метод, который проверяет тип отчета с помощью операторов if (amazonReportResult instanceof ...) и возвращает строку в каждом предложении if. Я понимаю, что проблему можно решить, запустив ng eject и настроив плагин uglify, но я не хотел идти по этому пути.
Что произойдет, если вы добавите
<div *ngSwitchDefault>Oops, it was none of what I expected</div>во внешний div? Что будет напечатано, если вы добавите{{ amazonReportResultType }}перед div? Вы пробовали обновиться до Angular 6 и последней версии интерфейса командной строки?