Open IgorKulishov opened 6 years ago
Почитал твое описание. В принципе понятно, но я пошел дальше и начал Блок 2. Синтаксис. Там как раз первый урок был про компоненты и их создание. Пришлось 3 раза пересмотреть видеоурок, прежде чем я более-менее разобрал что там к чему. Заодно повторил на практике пример создания нового компонента. Сначала руками создавал папки и файлы, потом из консоли, через CLI. Ну вроде справился, браузер отобразил все =) Теперь о вопросах. 1) В видео показывают, что итоговый "штрих" в подключении нового компонента это регистрация в app.modules.ts: импорт и прописывание в declarations. После этого в видео все перекомпилировалось и заработало. Но не у меня. Мне пришлось прописать новый компонент в строке bootstrap. В самом начале видео нарратор говорит, что в этой строке запускается компонент, но сам не вносит туда изменений. При этом у него все заработало. Мне же пришлось прописывать самому. Кроме того, когда компонент создается через CLI, все импорты-экспорты, пути и declarations прописываются автоматически везде, кроме 2х мест: в самом главном index.html, куда надо самому вписать тэг нового компонента, и в строке bootstrap. Я не особо вникал в эту нестыковку, т.к. с проблемой я разобрался и знаю, в чем загвоздка была. Но в целом это наверно из-за разницы в версиях, да? 2) Ну и традиционный вопрос, из разряда мои "зачем" =) для чего, для каких целей создают новые компоненты? Для чего они в целом нужны я понял. А вот для чего создавать новые и как часто это обычно происходит?
Хорошо что начал разбираться.
Да, на самом деле не всегда cli добавляет новую компоненту в модуль (по умолчанию главный модуль называется app.module.ts, но название может быть и другим). А) Как ты уже понял тебе на самом деле надо вручную импортировать компоненту в файл модуля (app.module.js по умолчанию) прописывать в declarations внутри @NgModule({}) декоратора:
import { HereisMyComponent } from './path/to/my/component/here-is-my-component.compinent.ts';
@NgModule({
declarations: [
AppComponent,
HereisMyComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Б. однако внутри свойства bootstrap находится только основной модуль, который и "обвязывается" (от слова bootstrap дословно шнурки "шнуровать" приложение).
приложение состоит из множества компонент.
Но в итоге мне пришлось вписать в bootstrap новый компонент, чтобы все заработало. Это так и должно быть или у меня какой-то глюк? Я закомитил то что вчера сделал в develop-andrey, погляди, если нужно будет наглядно посмотреть. Просто как только убираю из строки bootsrap новый компонент, ничего не происходит. В дебагере в html-структуре просто отображает тэг, вложений нет
Кстати, в бонус-уроках к основному курсу по Ангуляру идет курс по Тайпскрипту. Знать бы раньше, можно было тебе не тратить кучу времени на объяснения и рассказы тех или иных тем, а просто смотреть уроки и обсуждать непонятные моменты =) Там еще есть много интересного. Например, уроки по ES6, NodeJs, RxJS
Молодец Бро, замечательный вопрос - я никогда так не пробовал 👍 Дело в том что ты замечательным образом "нарушил" общепринятые правила Angular но нашел выход который так же работает - супер. Итак по порядку сначала объясню как "обычно" принято и потом почему работает в твоем случае и в чем разница: 1) я создал свой бренч и так же создал merge request из своего бренча в твой бренч где я так же написал подробно что я там сделал https://github.com/g1er/Andrew/pull/31 Там все просто, дело в том что обычно принято иметь один главный компонент приложения (верний в ерархии) и все остальные компоненты вкладывать внутри темплейта главной компоненты. Т.о. если посмотришь на мой запрос ты увидешь что я перебросил
<app-my></app-my>
<app-my2></app-my2>
из index.html
в app.component.html
и оставляю только одну главную компоненту для обвязки в верхнем уровне
bootstrap: [AppComponent]
2) теперь почему у тебя работает. Дело в том что ты сделал три компоненты в верхнем уровне соответственно их все три и надо обвязывать и указывать соответственно в bootstrap:
bootstrap: [AppComponent, MyComponent, My2Component]
Напиши если есть вопросы.
Да, я потом так и понял, насчет иерархии. В арр-компоненте прописываются все остальные. Я сейчас иду дальше, прохожу 4-5 уроки 2го блока. Буду стараться использовать свободные вечера, чтобы форсировать учебу. Если будут непонятны моменты, буду спрашивать
Хорошо, молодец! Желаю успеха! Задавай вопросы, будем создавать Pull requests и расписывать объяснения в отдельных уроках.
Сегодня смотрел урок на тему двусторонней связи "компонент-шаблон", где для работы нужен был FormsModule. Однако в app.module.ts в импортах его не оказалось. Пришлось самому разобраться, найти эту библиотеку и вручную прописать импорт. Это скорее не вопрос, а просто заметка о том, что некоторые вещи в ангуляре не настроены автоматически (хотя библиотека работы с формами, мне кажется, должна подключаться на автомате при создании проекта). Видать действительно разница в версиях влияет
Посмотри https://github.com/g1er/Andrew/issues/32 Я не все успел написать, но пока вкратце. Позже расспишу, если не понятно.
Приложение Angular 1) файлы Angular деляться условно на два типа:
2) Компоненты и сервисы написаны на typescript и представляют из себя классы Внимание: хотя на самом деле компонента может содержать в себе typescript, html и css файлы, само определение класса , которое говорит что этот класс является компонентой находиться в typescript файле. 3) В typescript введены в пользование decorators (декораторы это специальные функции), причем в Angular есть встроенные декораторы, которые помогают определить класс как компоненту или сервис. Декоратор это встроенная функция Angular, перед которой стоит знак
@
. В Angular есть несколько декораторов, основные из них помогают определить класс как сервис или компоненту (так же еще и модуль, то что мы будем проходить позже).@Component()
@Injectable()
4) Так же как правило название файла по соглашению названий говорят уже о том содержит ли файл компоненту или сервис:Предлагаю открыть в редакторе проект Angular и раскрыть содержимое папки
/src/app
там ты сможешь увидеть главную компонентуapp.component.ts
, если ты его откроешь, то увидешь декоратор и название определенного умолчанию класса AppComponent:Далее мы разберем components подробнее.