У меня есть приложение .NET Framework: ASP.NET MVC (4.6.1).Он содержит типичные контроллеры и .cshtml
представления.
Теперь мы собираемся ввести angular 6 (до того, как у нас были angularjs на небольшом количестве страниц).Поэтому мне интересно, как лучше всего использовать модульную архитектуру angular без необходимости переделывать каждый вид в данный момент.
В идеале (в угловом / внешнем виде) ваше приложение полностью маршрутизируется через angular и больше не имеет cshtml
, а всего лишь Home.cshtml
, который загружает angular-приложение.
Но из-за размера приложения и объема работы, необходимой для переделки всего, я пытаюсь найти лучший способ объединить обе технологии (что также может иметь некоторые преимущества?) И медленно перемещать страницы вangular 6 один за другим.
Это также подводит меня к тому, что было бы полезно загружать только те компоненты / модули, которые мне действительно нужны на этой определенной странице.Так, например, при показе страницы указателя мне не нужны детали компонентов.Это позволяет сократить время загрузки самого приложения angular на каждой странице.
Насколько я понимаю: каждый созданный модуль может иметь только один компонент начальной загрузки.Значит, мне нужно было бы создать модуль для каждой cshtml
страницы?
С этими знаниями я придумал следующую архитектуру:
Так что это для 1 «раздела» в приложении.Везде, где новый раздел требует функциональности, которая может быть выполнена с помощью angular, я делал бы то же самое.Таким образом, маршрутизация выполняется MVC, а не в угловых компонентах.
Я на правильном пути?Это лучший путь?Или я упускаю что-то важное, что могло бы работать намного лучше?
Теперь мне интересно: как мне правильно реструктурировать main.ts
, который на данный момент содержит:
import { AppModule } from './app/app.module';
import { ContactplanListModule } from './app/contactplan/contactplan-list/contactplan-list.module';
import { ContactplanDetailsModule } from './app/contactplan/contactplan-details/contactplan-details.module';
import { environment } from './environments/environment';
if (environment.production) {
enableProdMode();
}
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.log(err));
platformBrowserDynamic().bootstrapModule(ContactplanListModule)
.catch(err => console.log(err));
platformBrowserDynamic().bootstrapModule(ContactplanDetailsModule)
.catch(err => console.log(err));
Конечноэто теперь просто загрузит все модули, когда я включу dist/main.js
.Это хорошо в начале, но мне интересно, можно ли это легко разделить на части.
Я думал о том, чтобы сделать что-то подобное, я просто наткнулся на это, потому что жаловался, что другие 2 модуля не было в HTML .Это работает, но я думаю, что все по-прежнему объединено в одном и том же .js
файле?
if (window.location.pathname.toLowerCase().includes("contactplans/index") || window.location.pathname.toLowerCase().endsWith("contactplans")) {
platformBrowserDynamic().bootstrapModule(ContactplanListModule)
.catch(err => console.log(err));
} else if (window.location.pathname.toLowerCase().includes("Contactplans/details") || window.location.pathname.toLowerCase().includes("contactplans/create")) {
platformBrowserDynamic().bootstrapModule(ContactplanDetailsModule)
.catch(err => console.log(err));
} else {
platformBrowserDynamic().bootstrapModule(AppModule)
.catch(err => console.log(err));
}
Я посмотрел на ленивую загрузку, но для этого мне пришлось бы использовать маршрутизацию по всему приложению, посколькуЯ знаю.