Глава 1. ВВЕДЕНИЕ В ANGULAR ............................... 13
1.1. ЧТО ТАКОЕ ANGULAR................................................................. 14
1.2. ЧТО ТАКОЕ SINGLE PAGE APPLICATION (ОДНОСТРАНИЧНОЕ WEB-
ПРИЛОЖЕНИЕ ИЛИ ОДНОСТРАНИЧНЫЙ WEB-САЙТ). ................ 14
Глава 2. УСТАНОВКА И НАСТРОЙКА ANGULAR ДЛЯ РАЗРА-
БОТКИ........................................................ 20
2.1. УСТАНОВКА NODE.JS И ПАКЕТНОГО МЕНЕДЖЕРА NPM.................... 21
2.2. УСТАНОВКА ANGULAR CLI........................................................... 23
2.3. УСТАНОВКА РЕДАКТОРА КОДА ВЕБ-ПРИЛОЖЕНИЙ......................... 25
Глава 3. ПЕРВЫЙ ПРОЕКТ НА ANGULAR...................... 27
3.1. СОЗДАНИЕ ПРОЕКТА................................................................. 28
3.2. ПОДКЛЮЧЕНИЕ НОВЫХ БИБЛИОТЕК К ПРОЕКТУ. ФАЙЛ PACKAGE.
JSON. ПОДКЛЮЧАЕМ BOOTSTRAP. ........................................ 31
3.3. ЗАПУСК СЕРВЕРА, СБОРКА И ОТКРЫТИЕ ПРОЕКТА В ОКНЕ
БРАУЗЕРА.......................................................................... 33
3.4. ЗАДАЕМ СВОЕ СОДЕРЖИМОЕ ДЛЯ СОЗДАННОГО
ВЕБ-ПРИЛОЖЕНИЯ............................................................. 34
Глава 4. ОСНОВНЫЕ ПРИНЦИПЫ РАЗРАБОТКИ
ANGULAR.................................................... 39
4.1. АРХИТЕКТУРА ANGULAR-ПРИЛОЖЕНИЯ........................................ 40
4.2. ОБЗОР СТРУКТУРЫ ПРОЕКТА ANGULAR........................................ 42
Каталог e2e.................................................................................42
Каталог node_modules.................................................................42
Angular на примерах
4
Каталог src..................................................................................42
.editorConfig................................................................................43
.gitignore.....................................................................................44
angular-cli.json............................................................................45
karma-conf.json...........................................................................45
package.json ...............................................................................45
protractor-conf.js.........................................................................45
README.md ...............................................................................46
tsconfig.json ...............................................................................46
tslint.json ...................................................................................47
4.3. ЗАГРУЗКА ВЕБ-ПРИЛОЖЕНИЯ, СОЗДАННОГО НА ANGULAR............. 50
Глава 5. ПРИМЕР СОБСТВЕННОГО ВЕБ-ПРИЛОЖЕНИЯ
НА ANGULAR. ВЕБ-ПРИЛОЖЕНИЕ «СПИСОК ПОКУ-
ПОК».......................................................... 53
5.1. СОЗДАЕМ НОВЫЙ ПРОЕКТ......................................................... 54
5.2. СОЗДАЕМ СТРАНИЦУ-ОСНОВУ БЕЗ ИСПОЛЬЗОВАНИЯ ANGULAR...... 55
5.3. РЕАЛИЗАЦИЯ С ПОМОЩЬЮ ANGULAR.......................................... 57
5.3.1. Компонент Angular.............................................................57
5.3.2. Модуль Angular..................................................................60
5.3.3. Модель данных..................................................................62
5.3.4. Задаем использование компонентов в файле index.
html ............................................................................................63
5.3.5. Как это работает................................................................65
Глава 6. КОМПОНЕНТЫ ANGULAR: СОЗДАНИЕ И ИС-
ПОЛЬЗОВАНИЕ............................................ 69
6.1. ЧТО ТАКОЕ КОМПОНЕНТ В ANGULAR............................................. 70
6.2. СОЗДАНИЕ КОМПОНЕНТОВ........................................................ 72
Глава 7. ШАБЛОНЫ И СТИЛИ КОМПОНЕНТА............... 79
Содержание
5
Глава 8. СВЯЗЫВАНИЕ ДАННЫХ............................... 83
8.1.ЧТО ТАКОЕ СВЯЗЫВАНИЕ ДАННЫХ............................................... 84
8.2. ОДНОНАПРАВЛЕННОЕ СВЯЗЫВАНИЕ ONE-WAY DATA BINDING.......... 83
Однонаправленное связывание с помощью {{ }}..........................85
Однонаправленное связывание с помощью [ и ] или *.
Привязка свойств........................................................................88
8.3. ОБРАБОТКА СОБЫТИЙ .............................................................. 90
8.4. ДВУНАПРАВЛЕННОЕ СВЯЗЫВАНИЕ ............................................. 93
Глава 9. ДИРЕКТИВЫ. ............................................ 97
Глава 10. РОУТИНГ И МАРШРУТИЗАЦИЯ.................. 101
Глава 11. БАЗОВЫЕ ТИПЫ TYPESCRIPT. .................. 107
Boolean.....................................................................................108
Number.....................................................................................108
String........................................................................................108
Array .........................................................................................109
Tuple.........................................................................................109
Enum (Перечисления)...............................................................110
Any............................................................................................111
Void...........................................................................................112
Type assertions (Приведение к типу) ..........................................112
Немного о let.............................................................................113
Глава 12. ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ.................... 115
Variable Declarations..................................................................116
Объявления var.........................................................................116
Правила области видимости (Scoping)......................................117
Variable capturing quirks ............................................................118
Объявления let..........................................................................120
Angular на примерах
6
Блочная область видимости......................................................120
Повторное объявление и экранирование..................................122
Замыкание переменных с блочной областью видимости..........123
Объявления const.....................................................................125
let или const?.............................................................................125
Деструктурирование.................................................................126
Деструктурирование объекта....................................................127
Переименование свойств.........................................................127
Значения по умолчанию............................................................128
Объявление функций................................................................128
Глава 13. ИНТЕРФЕЙСЫ TYPESCRIPT...................... 131
Наш первый интерфейс............................................................132
Опциональные свойства...........................................................133
Свойства только для чтения......................................................134
Проверки на лишние свойства..................................................135
Функциональные типы..............................................................137
Индексируемые типы................................................................139
Типы классов............................................................................141
Расширение интерфейсов........................................................143
Гибридные типы........................................................................144
Интерфейсы, расширяющие классы.........................................145
Глава 14. КЛАССЫ TYPESCRIPT.............................. 147
Классы......................................................................................148
Наследование...........................................................................149
Модификаторы доступа............................................................150
Модификатор readonly..............................................................153
Свойства параметров...............................................................154
Аксессоры (геттеры/сеттеры)...................................................154
Статические свойства...............................................................156
Абстрактные классы..................................................................156
Дополнительные методы..........................................................158
Использование класса в качестве интерфейса..........................160
Содержание
7
Глава 15. ФУНКЦИИ TYPESCRIPT............................ 161
15.1. ФУНКЦИИ............................................................................ 162
15.2. ТИПЫ ФУНКЦИЙ................................................................... 163
Добавление типов к функции....................................................163
Пишем тип функции..................................................................163
Выведение типов......................................................................164
15.3. ОПЦИОНАЛЬНЫЕ ПАРАМЕТРЫ И ПАРАМЕТРЫ ПО УМОЛЧАНИЮ.... 164
15.4. ОСТАТОЧНЫЕ ПАРАМЕТРЫ (REST PARAMETERS)......................... 167
this и стрелочные функции........................................................168
Параметры this..........................................................................170
Параметры this для функций обратного вызова.........................171
15.5. ПЕРЕГРУЗКИ........................................................................ 172
Глава 16. ОБОБЩЕНИЯ (GENERICS) В TYPESCRIPT. ... 175
16.1. РАБОТА С ОБОБЩЕННЫМИ ТИПОВЫМИ ПЕРЕМЕННЫМИ............. 178
16.2. ОБОБЩЕННЫЕ ТИПЫ. ........................................................... 179
16.3. ОБОБЩЕННЫЕ КЛАССЫ......................................................... 181
16.4. ОГРАНИЧЕНИЯ ОБОБЩЕНИЙ. ................................................. 182
16.5. ИСПОЛЬЗОВАНИЕ ТИПОВЫХ ПАРАМЕТРОВ В ОГРАНИЧЕНИЯХ ОБОБ-
ЩЕНИЙ. .......................................................................... 183
16.6. ИСПОЛЬЗОВАНИЕ ТИПОВ КЛАССОВ В ОБОБЩЕНИЯХ................. 184
Глава 17. РАСШИРЕННАЯ РАБОТА С ТИПАМИ............ 187
17.1. ПЕРЕЧИСЛЕНИЯ В TYPESCRIPT................................................ 188
17.1.1. Перечисления................................................................188
17.1.2. Окружающие перечисления...........................................191
17.2. СОВМЕСТИМОСТЬ ТИПОВ...................................................... 191
17.2.1. Замечание относительно надежности............................192
17.2.2. Сравнение двух функций...............................................193
Angular на примерах
8
17.2.3. Бивариантность параметров функции...........................194
17.2.4. Опциональные и остаточные параметры........................195
17.2.5. Функции с перегрузками...............................................196
17.2.6. Перечисления................................................................196
17.2.7. Классы...........................................................................196
17.2.8. Обобщения....................................................................197
17.3.ПРОДВИНУТЫЕ ТИПЫ. ........................................................... 198
17.3.1. Тип объединение...........................................................198
17.3.2. Защитники типа и различие типов.................................200
Определённые Пользователем Защитники Типа.......................201
Защитники типа typeof..............................................................202
Защитники типа instanceof........................................................203
17.3.3. Типы пересечения.........................................................205
17.3.4. Псевдонимы(«Alias») типа..............................................205
17.3.5. Тип строкового литерала...............................................207
17.3.6. Полиморфный тип this...................................................208
17.4. СИМВОЛЫ........................................................................... 210
Глава 18. ИТЕРАТОРЫ И ГЕНЕРАТОРЫ..................... 215
18.1. ОПЕРАТОР FOR..OF................................................................ 216
for..of против for..in....................................................................216
18.2. ГЕНЕРАЦИЯ КОДА................................................................. 217
Соответствие ES5 и ES3............................................................217
Соответствие ECMAScript 2015 и выше.....................................218
Глава 19. МОДУЛИ TYPESCRIPT.............................. 219
19.1. ЭКСПОРТ............................................................................ 220
Экспорт объявления.................................................................220
Экспортное определение (Export statement).............................221
Реэкспорт.................................................................................221
19.2. ИМПОРТ.............................................................................. 222
Содержание
9
Импорт одного экспортированного элемента...........................222
Импорт всего модуля в одну переменную, и её
использование для доступа к экспортированным
элементам модуля....................................................................223
Импорт модуля ради «побочных эффектов»..............................223
19.3. ЭКСПОРТ ПО УМОЛЧАНИЮ (DEFAULT EXPORT)........................... 223
19.4. EXPORT = И IMPORT = REQUIRE(). ............................................ 225
19.5. ГЕНЕРАЦИЯ КОДА ДЛЯ МОДУЛЕЙ............................................ 226
19.6. ПРОСТОЙ ПРИМЕР................................................................ 228
19.7. ОПЦИОНАЛЬНАЯ ЗАГРУЗКА МОДУЛЕЙ И ЕЁ ДРУГИЕ ПРОДВИНУТЫЕ
СЦЕНАРИИ....................................................................... 230
19.8. РАБОТА С ДРУГИМИ БИБЛИОТЕКАМИ JAVASCRIPT...................... 232
Внешние модули.......................................................................232
Сокращенная запись объявления внешних модулей.................233
Объявления модулей с использованием знаков
подстановки..............................................................................233
Модули UMD.............................................................................234
19.9. РАБОТА С ДРУГИМИ БИБЛИОТЕКАМИ JAVASCRIPT...................... 235
Экспортируйте настолько близко к верхнему уровню,
насколько это возможно...........................................................235
Если вы экспортируете только один class или одну function,
используйте export default.........................................................235
Если вы экспортируете несколько объектов, поместите их
на верхний уровень...................................................................236
Явно определяйте импортированные имена.............................236
Используйте шаблон импорта пространства имен в случае
импорта большого количества элементов.................................237
19.10. РЕЭКСПОРТ С ЦЕЛЬЮ РАСШИРЕНИЯ ФУНКЦИОНАЛА................ 237
Не используйте в модулях пространства имён..........................241
Индикаторы опасности.............................................................241
Angular на примерах
10
Глава 20. ПРОСТРАНСТВА ИМЕН. ........................... 243
20.1. ВАЛИДАТОРЫ В ОДИНОЧНОМ ФАЙЛЕ. ..................................... 244
20.2. ИСПОЛЬЗОВАНИЕ ПРОСТРАНСТВ ИМЁН................................... 245
20.3. ВАЛИДАТОРЫ ВНУТРИ ПРОСТРАНСТВА ИМЁН............................ 246
20.4. РАЗБИЕНИЕ НА НЕСКОЛЬКО ФАЙЛОВ...................................... 247
Многофайловые пространства имён.........................................247
20.5. ПСЕВДОНИМЫ..................................................................... 249
20.6. РАБОТА С ДРУГИМИ БИБЛИОТЕКАМИ JAVASCRIPT...................... 250
Внешние пространства имён....................................................250
20.7. ПРОСТРАНСТВО ИМЕН И МОДУЛИ ........................................... 251
Использование пространств имен............................................251
Использование модулей...........................................................252
Ошибки при работе с пространствами имен и модулями..........252
Ссылка (/// ) на модуль...........................................252
Использование пространств имен без необходимости.............253
Недостатки модулей.................................................................254
Глава 21. ДЕКОРАТОРЫ........................................ 257
21.1. ДЕКОРАТОРЫ....................................................................... 258
Фабрика Декораторов..............................................................259
Композиция Декоратора...........................................................259
21.2. ВЫЧИСЛЕНИЕ ДЕКОРАТОРА.................................................... 261
Декораторы Класса...................................................................261
Декораторы Методов................................................................262
Декоратор Акцессора...............................................................264
Декораторы Свойства...............................................................265
Декораторы Параметров...........................................................267
Метаинформация.....................................................................269
Содержание
11
Глава 22. ВЕБ-ПРИЛОЖЕНИЕ «КАТАЛОГ РУССКИХ АКТЕ-
РОВ» ....................................................... 273
22.1. ФАЙЛ INDEX.HTML................................................................ 276
22.2. ФАЙЛ MAIN.TS...................................................................... 276
22.3. КОМПОНЕНТЫ...................................................................... 277
22.3.1. Коневой компонент app.component (в папке src/app).....277
22.3.2. Компонент artist-item.....................................................279
22.3.3. Компонент artist-details..................................................280
22.4. МОДУЛИ.............................................................................. 281
22.5. ПАЙПЫ................................................................................ 282
СПИСОК ИСТОЧНИКОВ И ИСПОЛЬЗОВАННОЙ
ЛИТЕРАТУРЫ ........................................... 283