Я пытаюсь запустить супер-базовое веб-приложение ASP.NET Core 2 и Angular 5, и у меня возникла проблема с тем, что компонент не отображается, если я также не включу компонент корневого приложения.
Итак, симптомы, которые я получаю, заключаются в том, что если я включу корень приложения в Home или Gallery Index.cshtml, тогда это будет нормально, если я включу миниатюра ниже этого, тогда это также будет хорошо видно. Однако, если я удалю корень приложения и оставлю миниатюра, то ничего не появится.
Я уверен, что мне не хватает чего-то супер простого, и я предполагаю, что это из-за зависимостей или app.module, но я недостаточно хорошо понимаю Angular на данный момент, чтобы понять это. Я часами гуглил и безуспешно пытался разобраться в этом :(
Все, что я хотел бы сделать, это иметь кучу компонентов, которые я могу независимо использовать в разных представлениях вместе или по отдельности.
Вот ссылка репозитория github на проект: https://github.com/rpasechnikov/AspNetCore2Angular5EfCoreSampleWebsite
Спасибо!!
Спасибо за ваш ответ! Я обновил OP выше :)






Поэкспериментировав, я нашел проблему.
Когда вы помещаете компоненты в массив bootstrap основного модуля, Angular ожидает, что все из них будет отображаться на странице. Компоненты в массиве bootstrap не являются необязательными, но обязательными. Фактически, за исключением случаев, когда вы добавляете оба компонента в файлы HTML, вы получаете исключение (проверьте свою консоль). Разница в том, что, когда вы просто пропускаете GalleryThumbnail, ошибка возникает после того, как Angular отрендерил AppComponent, что позволяет вам полагать, что ничего не случилось, хотя на самом деле это было. Да, страница вроде бы работоспособна, хотя я бы не поверил, что она будет работать правильно.
Проблема, когда вы не включаете AppComponent, заключается в том, что в вашем модуле этот компонент является первым, добавленным в массив начальной загрузки, поэтому Angular пытается найти <app-root> на странице. Когда этого не происходит, он запускает исключение, и начальная загрузка внезапно завершается, поэтому он никогда не сможет отобразить GalleryThumbnail.
В заключение, вы не можете использовать массив начальной загрузки для выбора между корневыми компонентами. Если вы хотите инициализировать только один из них, вы должны:
AppComponent на другое (HomeComponent?)AppComponent, и в его шаблоне вы просто визуализируете либо HomeComponent, либо GalleryThumbnail, в зависимости от того, какие критерии вы хотите (URL страницы, некоторая глобальная переменная, которую вы добавляете на страницу .cshtml ...)Вы также можете использовать маршрутизацию, чтобы определить, какой компонент показывать, добавив RouteOutlet в этот новый шаблон AppComponent вместо использования ngIf или ngSwitch для выбора компонента для рендеринга. Таким образом, у вас есть только один файл .cshtml, и на основе URL-адреса Angular будет отображать тот или иной компонент. Это должен быть ваш подход при работе с различными страницами в Angular, поскольку это структура, предназначенная для создания SPA. Это немного сложнее, чем просто использовать ngIf в этом простом случае, но это также гораздо более масштабируемое решение, так что это определенно правильный путь, если вы планируете расширять свое приложение и иметь больше маршрутов в будущем.
Если вы решите изменить свой подход к этому, убедитесь, что вы добавляете маршруты в основное приложение ASP.NET, которые соответствуют тем, которые определены в Angular, и что все они возвращают вашу страницу Home / Index.cshtml.
Надеюсь, это поможет.
Спасибо большое за Ваш ответ! В этом есть смысл! Я думаю, что отчасти моя путаница связана с отсутствием четкого понимания компонентов angular и модулей и того, как они потребляются внутри моих .cshtml Views. Я думал, что буду создавать свои представления внутри файлов .cshtml с несколькими компонентами в них. Ваш ответ, кажется, подсказывает мне, что я должен создать корневой компонент и спроектировать все представление в этом компоненте? Я думаю, что изо всех сил пытаюсь понять, где проходит граница между файлами .cshtml и компонентом angular.
Да, с Angular должно быть так. HTML-страница в Angular должна быть простой поддержкой для размещения приложения Angular. Однако вы можете поместить на страницу статический контент, такой как верхний или нижний колонтитул, или другой контент, связанный с SEO (поскольку многие поисковые системы не могут обрабатывать приложения Angular)
Пожалуйста, можете ли вы добавить код из обоих компонентов и основного файла html так, как вы начинаете с AppComponent или GalleryThumbnail?