От AngularJS до Angular 7 и других... мой личный путь ❤️☕️

С возвращением 👋

Это продолжение многих историй, которые начались с этого первого поста на Medium.



Думаю, пора мне приступить к моему проекту aWe Motors. Начнем с создания простой страницы приветствия. На данный момент ничего особенного, но должно быть следующее:

Предпосылка

Я начинаю эту историю, предполагая, что все настроено для разработки с помощью Angular и создан первоначальный проект. Если вам нужно освежить в памяти, вы всегда можете прочитать мой рассказ Начало работы.

Давайте делиться

Первое, что я хочу сделать, это убедиться, что файл app.module.ts достаточно компактен. Для этого я предпочитаю разделять модули, которые, как я знаю, будут использоваться во всем приложении, в отдельный файл shared.module.ts.

Я знаю, что все мое приложение будет использовать основные директивы и каналы Angular, такие как NgIf, NgForOf, DecimalPipe и т. д. Мы получаем эту функциональность от CommonModule. Я также хочу, чтобы мои страницы использовали FlexLayout, и большинству из них потребуется доступ к FormsModule. Прикрепленная навигация также будет общей для всех моих страниц, поэтому давайте добавим ее в наш каталог shared/components:

К вашему сведению, есть также файл nav.component.css, но в настоящее время он пуст.

В нашем shared.module.ts мы могли бы импортировать наши компоненты Angular Material, но мне нравится хранить их отдельно в отдельном модуле с именем shared-material.module.ts.

Давайте свяжем все это вместе в файле shared.module.ts:

Импорт, Декларации, Экспорт… Почему?

NavComponent использует FlexLayout, MatToolbar, MatIcon и, возможно, NgIf / NgForOf, поэтому мы хотим включить CommonModule, SharedMaterialModule и FlexLayoutModule в наш импорт.

Поскольку NavComponent принадлежит этому модулю, мы также должны поместить его в объявления.

Мы хотим, чтобы эти модули были доступны для новых компонентов. Вот почему мы включили их в экспорт. Делая это, новые компоненты могут получить к ним доступ, просто импортировав наш SharedModule.

Страницы/компоненты

Наша конечная цель — создать страницу приветствия, но я хочу сначала создать другие компоненты (шапку, основную часть, нижний колонтитул). Внутри моей папки app я создам папку pages, внутри которой нам нужно создать нашу папку welcome. Давайте начнем с этого header, поэтому создайте папку под welcome с именем header.

Заголовок

Внутри нашей папки header мы можем сначала создать файл header.component.ts:

Для HTML мы хотим включить навигацию, раздел с заголовком/маленьким абзацем описания и фоновое изображение того прекрасного Scion FRS, которое было снято Erik Mclean.

Помните, что наша навигация — это общий компонент, поэтому мы хотим включить его с помощью селектора app-nav.

Для CSS я хочу включить нашу фотографию FRS и придать ей линейный градиент 50%. У меня также есть стили для элементов ‹section›, ‹h1›, ‹p› и несколько медиа-запросов для настройки размера и высоты шрифта. , ширина на небольших устройствах. Одним из примеров является то, что абзац раздела занимает 50% ширины, но на небольших устройствах занимает 100%.

Поскольку мы используем FlexLayout, я обязательно следую рекомендациям по медиа-запросам, которые они установили. Документацию можно найти здесь.

Я решил не углубляться в объяснение CSS, но если у кого-то есть комментарии или вы хотите узнать больше, просто дайте мне знать 😃

Главный

Теперь мы можем работать с основным разделом, поэтому создайте папку под приветствием с именем main. Внутри этой папки давайте создадим наш main.component.ts:

HTML будет состоять из нашего изображения разработки справа и деталей этого проекта слева.

Когда они отображаются на экране, таком как планшет или меньше, мы хотели бы, чтобы изображение / детали изгибались на 100% и отображали детали под изображением. Эта функциональность достигается с помощью FlexLayout (fxFlex.lt-md="100), но в приведенном ниже CSS вы можете увидеть, как мы также изменили некоторые отступы на основе медиа-запросов.

Нижний колонтитул

Нижний колонтитул будет включен в нижнюю часть наших страниц, так что вы можете догадаться, где мы хотим его разместить? Мы создадим папку footer внутри нашего каталога shared/components.

Добро пожаловать

У нас есть части для создания нашей первой страницы… теперь нам нужно собрать их все вместе. Сначала давайте создадим файл welcome.component.ts:

Я также хочу подготовить страницу для отложенной загрузки и импортировать различные компоненты (SharedModule, FooterComponent, HeaderComponent, MainComponent, WelcomeComponent), поэтому давайте создадим наш welcome.module.ts :

Чтобы лениво загрузить наш корневой маршрут для приветствия, мы должны помнить об использовании RouterModule.forChild вместо RouterModule.forRoot.

Наши компоненты селектора доступны для нашего шаблона 👍. Теперь нам нужно определить HTML-макет… искомый порядок: верхний колонтитул, главный и нижний колонтитул.

Нам не нужно беспокоиться о навигации, поскольку мы включили ее в наш компонент заголовка.

Отложенная загрузка маршрута

Когда кто-то заходит в наш корневой каталог, мы хотим загрузить нашу страницу приветствия, но мы также хотим добиться отложенной загрузки.

Обычный маршрут будет выглядеть примерно так:

const routes: Routes = [
   { path: 'welcome', component: WelcomeComponent }
];

Все наши компоненты, связанные с WelcomeComponent, также должны быть импортированы в наш app-routing.module.ts… Я надеюсь, вы понимаете, что как только вы начнете добавлять больше маршрутов, этим файлом станет довольно сложно управлять.

Мы использовали welcome.module.ts, чтобы сделать за нас тяжелую работу и загрузить эти компоненты только тогда, когда это необходимо. Нам просто нужно настроить наши маршруты, чтобы использовать свойство loadChildren и указать его на наш WelcomeModule.

Ленивая загрузка помогает уменьшить начальные размеры пакетов, что, в свою очередь, помогает сократить время загрузки. Мы увидим больше примеров этого по мере расширения нашего проекта, но я решил познакомить вас с этим мышлением на раннем этапе.

Теперь у нас должна быть заполненная страница приветствия! 👏

Филиал репозитория



Вывод

Спасибо, что нашли время, чтобы прочитать мои истории, и если вы подписчик, я невероятно благодарен ❤️.

Если вам понравилась эта статья, пожалуйста, поаплодируйте 👏!

Если я что-то упустил или у вас есть комментарии, проблемы или советы, пожалуйста, не стесняйтесь обращаться ко мне.