background top icon
background center wave icon
background filled rhombus icon
background two lines icon
background stroke rhombus icon

Скачать "Vue.js Tutorial: Beginner to Front-End Developer"

input logo icon
Обложка аудиозаписи
Подождите немного, мы готовим ссылки для удобного просмотра видео без рекламы и его скачивания.
console placeholder icon
Оглавление
|

Оглавление

0:00
1.1 Introduction
2:31
2.1 Getting Started With Vue
10:51
2.2 Using Loops to Generate Content
17:00
2.3 Binding Data to Attributes
25:11
2.4 Setting Up Events
33:15
2.5 Binding CSS Classes I
41:48
2.6 Using Computed Properties
48:05
2.7 Binding CSS Classes II
55:00
2.8 Introducing Components
1:04:19
2.9 Understanding Data Flow
1:13:00
3.1 Getting Started With the Vue CLI
1:21:30
3.2 Starting a Project From Scratch
1:32:18
3.3 Applying CSS to Components
1:41:51
4.1 Using the created() Lifecycle Event to Load Data
1:48:19
4.2 Working With Unset Props
1:55:19
4.3 Deciding When to Load Data
2:01:14
4.4 Working With Forms
2:08:43
4.5 Validating Forms
2:14:39
4.6 Updating and Filtering Data
2:21:05
4.7 Using Watchers
2:25:19
5.1 Creating Custom Events
2:32:48
5.2 Writing a Global Event Bus
2:44:37
6.1 Introducing Vue Router
2:53:19
6.2 Using Route Params
2:59:18
6.3 Loading Data for Views
3:10:07
6.4 Watching Params to Reload Data
3:16:57
6.5 Using the Router's Active Class
3:23:36
6.6 Nesting Routes
3:30:52
7.1 Introducing the Composition API
3:40:26
7.2 Providing and Injecting Dependencies Into Components
3:48:18
7.3 Accessing Props and Router Functions
3:54:58
7.4 Binding Data and Working Wth Forms
4:06:00
7.5 Defining Computed and Watched Values
4:16:18
7.6 Implementing the Delete Functionality
4:20:42
8.1 Conclusion
Теги видео
|

Теги видео

vue 3
vue 3 tutorial
vue js
vuejs
vue js tutorial
vue js tutorial for beginners
vue router
vue js course
front end developer
vue 3 composition api
vue
vue js 2.0
vue js 2 components
vue composition api tutorial
vue composition
Субтитры
|

Субтитры

subtitles menu arrow
  • enАнглийский
Скачать
00:00:04
[Музыка]
00:00:07
Спасибо
00:00:09
UI Frameworks кардинально изменились
00:00:12
как мы пишем веб-приложения
00:00:14
и я понимаю, что существует много фреймворков
00:00:16
выбирать и выбирать гораздо меньше
00:00:19
начать с этого может быть сложно
00:00:21
ну, позволь мне сделать это немного проще для
00:00:23
пока ты реагируешь, у тебя есть преимущество имени
00:00:25
признание, что существуют другие фреймворки
00:00:28
это, по моему скромному мнению, имеет большое значение
00:00:30
лучшая работа, например, vue.js
00:00:33
чрезвычайно доступен, если вы уже
00:00:35
немного знать HTML, CSS и JavaScript
00:00:38
его набор функций легче понять
00:00:40
и использовать его очень-очень быстро, и это
00:00:44
растущее сообщество готово присоединиться
00:00:46
и помогите, если у вас есть какие-либо вопросы, привет, я
00:00:49
Я Джереми МакПик, и я хотел бы преподавать
00:00:52
ты все, что тебе нужно получить
00:00:53
начали с vue.js, мы начнем с
00:00:56
самое начало, и я научу тебя
00:00:58
основы, используя только библиотеку View
00:01:01
не требуются инструменты сборки или цепочки инструментов
00:01:04
вы научитесь создавать приложения
00:01:06
Определите и используйте параметры и организуйте свои
00:01:08
приложения на меньшие более
00:01:10
поддерживаемые части, называемые компонентами
00:01:13
но тогда мы перейдем к инструменту
00:01:16
цепочка, потому что это заставляет работать над более крупными
00:01:18
проекты станут проще, вы научитесь загружать
00:01:21
и работать с реактивными данными, как
00:01:23
обрабатывать ввод пользователя и создавать собственные
00:01:25
события, которые вы можете использовать в своих
00:01:27
приложения, я также научу вас, как
00:01:29
манипулировать стилем, создавать вычисляемые
00:01:32
свойства и определить объекты, которые наблюдают
00:01:35
ваши данные для изменений, чтобы вы могли
00:01:37
реагировать на эти изменения, вы узнаете, как
00:01:39
создавать одностраничные приложения с использованием
00:01:42
маршрутизатор просмотра и как его использовать
00:01:44
API композиции для улучшения
00:01:46
ремонтопригодность у нас есть много оснований
00:01:49
чтобы прикрыть, поэтому, когда будете готовы, встаньте в очередь
00:01:51
первое видео и мы начнем
00:01:53
но сначала, если вы хотите создать
00:01:56
профессиональный веб-сайт или вы хотите добавить
00:01:58
функции, которые сделают ваш сайт выдающимся
00:02:00
затем отправляйтесь в codecanyon
00:02:03
рынок высококачественного JavaScript
00:02:05
и компоненты PHP HTML5 и мобильные устройства
00:02:08
шаблоны и многое другое, что можно найти на
00:02:12
код Canyon поможет вам легко добавить
00:02:14
функциональность и потрясающая графика
00:02:16
что вам необходимо удовлетворить потребности вашего бизнеса
00:02:17
целей, вы найдете огромную библиотеку, которая
00:02:20
содержит тысячи JavaScript и PHP
00:02:22
компоненты и почти 20 000 HTML и
00:02:26
мобильные шаблоны, разумеется, вы
00:02:28
найди то, что ты ищешь, чтобы взять с собой
00:02:29
ваш сайт на новый уровень
00:02:32
есть две вещи, которые я хочу сделать
00:02:34
коснитесь сначала, это ваш редактор кода сейчас
00:02:37
технически мы работаем с текстом и
00:02:40
мы можем использовать любой текстовый редактор, чтобы сделать
00:02:42
работа, которую нам нужно сделать, несмотря на текст
00:02:45
мы работаем с кодом и
00:02:47
редакторы кода имеют функции, которые делают его
00:02:49
проще работать с кодом, поэтому я рекомендую
00:02:52
с помощью редактора кода существует множество бесплатных
00:02:55
и многие из них несвободны, так что не стесняйтесь
00:02:58
использовать тот, который вы есть
00:03:00
комфортно, лично я использую Visual
00:03:02
Код студии, потому что он бесплатный, он также
00:03:05
кроссплатформенный, и это также лучший
00:03:08
редактор кода для JavaScript, но опять же
00:03:11
не стесняйтесь использовать любой редактор кода
00:03:13
что тебе комфортно со вторым
00:03:15
дело в том, что инструменты разработчика теперь представляют собой эти
00:03:19
это инструменты, которые вы устанавливаете в
00:03:21
браузере они используются для отладки и
00:03:24
ты увидишь, как я использую их на протяжении всего этого
00:03:26
конечно, на самом деле, если вы посмотрите в верхнем
00:03:28
правый угол браузера, вы можете
00:03:31
вижу, что они у меня уже установлены
00:03:33
это значок вида здесь и я
00:03:37
рекомендую вам установить это также
00:03:39
конечно Firefox Chrome и ну
00:03:42
все остальное основано на Chrome, поэтому
00:03:44
все браузеры поддерживаются
00:03:47
инструменты разработки, поэтому я еще раз рекомендую это
00:03:50
вы устанавливаете их, потому что они очень
00:03:53
полезно, так как я уже говорил, что это очень просто
00:03:55
чтобы приступить к работе с View, поэтому, если мы
00:03:58
зайдите на viewjs.org, давайте перейдем к быстрому
00:04:01
начни и там будет раздел
00:04:03
сейчас вызывается без инструментов сборки, да
00:04:06
в конце концов мы перейдем к сборке
00:04:08
инструменты, потому что это просто делает наши
00:04:11
живет немного легче, но правильно
00:04:12
теперь перейдем к разделу без
00:04:15
создайте инструменты и давайте сначала скопируем это
00:04:18
строка. Это использование CDN, вот что
00:04:21
мы собираемся это сделать, давай перейдем
00:04:23
в наш редактор кода давайте создадим новый
00:04:25
файл, который я собираюсь вызвать
00:04:28
index.html и, насколько заголовок
00:04:31
обеспокоен, давайте просто назовем это мнение
00:04:33
Основы, а затем давайте вставим это
00:04:36
элемент сценария, давайте также продолжим и
00:04:39
вставьте CDN для начальной загрузки просто так
00:04:43
что у нас есть вещи, которые не используют
00:04:45
таблица стилей по умолчанию, и начнем с
00:04:49
просто некоторый контент, который мы собираемся
00:04:52
жесткий код на эту страницу и, в конечном итоге,
00:04:54
мы собираемся использовать представление для генерации
00:04:56
этот контент для нас, поэтому мы начнем с
00:04:59
H1 — это заголовок нашей страницы, поэтому
00:05:02
давай просто поздороваемся. Просмотр, а потом мы
00:05:05
будет некоторый контент, например, приветствие
00:05:08
в чудесный мир зрения, а затем
00:05:11
давайте откроем это в браузере, мы можем
00:05:13
просто дважды щелкните значок, которого нет
00:05:15
выполнение каких-либо HTTP-запросов или чего-либо еще
00:05:17
вот так, так что все будет хорошо
00:05:19
и начнем, это здорово, как бы я ни был
00:05:23
хочу добавить сюда немного стиля, так что давайте
00:05:26
на самом деле оберните это в div с помощью
00:05:29
класс контейнера, чтобы мы могли использовать
00:05:33
загрузите там, и когда мы обновимся, все в порядке
00:05:36
это перенесли, но это нормально, так что
00:05:38
мы хотим использовать представление, чтобы
00:05:41
по сути, предоставляйте тот же контент
00:05:44
и мы можем сделать это, добавив скрипт
00:05:46
элемент в нижней части нашего тела
00:05:48
потому что мы хотим, чтобы это выполнилось после
00:05:50
все остальное загрузилось и мы
00:05:52
собираемся создать приложение View
00:05:54
с помощью объекта представления это дается
00:05:57
нам от библиотеки View, и у нас есть
00:06:01
метод под названием «Создать приложение» теперь я сказал, что
00:06:03
это создание приложения, которое
00:06:05
здравствуйте, это называется создать приложение, но это
00:06:08
также создает то, что мы обычно называем A
00:06:11
Посмотреть экземпляр и один из действительно крутых
00:06:13
Что касается представления, так это то, что мы можем иметь
00:06:15
несколько экземпляров представления в одном
00:06:18
веб-страница, которую мы будем
00:06:19
посмотрим на следующем уроке, но правильно
00:06:22
сейчас мы будем работать только с одним
00:06:24
небольшое приложение, и мы хотим смонтировать
00:06:27
это где-то на нашей веб-странице и
00:06:30
мы делаем это с помощью метода монтирования, а затем
00:06:32
мы указываем элемент HTML, в котором мы
00:06:35
хотим установить это, и мы хотим это сделать
00:06:38
смонтируйте это внутри нашего элемента div сейчас
00:06:41
это CSS-селектор, и прямо сейчас мы
00:06:44
есть только один элемент div, так что это
00:06:46
все будет хорошо, однако я думаю, что мы
00:06:49
было бы лучше, если бы у нас было немного
00:06:51
здесь своего рода уникальный идентификатор, так что давайте
00:06:53
просто назовите этот контент, и мы это сделаем
00:06:55
измените наш селектор CSS на идентификатор
00:06:59
контент сейчас, если мы просмотрим это в
00:07:02
браузере это будет выглядеть именно так
00:07:04
то же самое, ничего такого не будет
00:07:05
разные, и это прежде всего потому, что
00:07:07
да, мы создали экземпляр представления, но это
00:07:11
однако на самом деле ничего не делаю
00:07:13
есть одна очень важная вещь, которая
00:07:15
произошло за кулисами, и это
00:07:18
с тех пор, как мы смонтировали наше приложение
00:07:20
с этим элементом с идентификатором контента
00:07:24
то, что у нас здесь внутри, на самом деле
00:07:27
шаблон и представление будут использовать это
00:07:31
шаблон, чтобы сгенерировать то, что мы
00:07:34
конечно, сейчас посмотри внутри браузера
00:07:36
сейчас наш шаблон жестко запрограммирован
00:07:39
HTML, но мы хотим программировать это, мы
00:07:42
хотите предоставить данные нашему
00:07:45
приложения, чтобы мы могли их просматривать
00:07:47
через наш шаблон, поэтому мы делаем это с помощью
00:07:50
передавая в это то, что мы называем опциями
00:07:53
создать метод приложения, параметры — ничего
00:07:56
больше, чем объект и свойства
00:07:59
ну, это разные варианты
00:08:02
первый, который мы собираемся рассмотреть
00:08:04
это опция данных, которая предоставляет данные для
00:08:08
наше приложение — это функция, которая
00:08:12
возвращает объект сейчас, если вы знакомы
00:08:14
с помощью реакции или других фреймворков это
00:08:17
будет называться государством, это
00:08:20
состояние нашего приложения, поэтому мы
00:08:22
по сути, у нас есть две вещи, которые мы хотим
00:08:24
наше приложение для работы с первым
00:08:26
это заголовок страницы, в которой указана строка
00:08:30
здравствуйте, просмотр, мы собираемся вам позвонить
00:08:32
это название страницы, и давайте продолжим
00:08:35
и возьми этот текст, из которого мы его вырежем
00:08:38
наш шаблон, и мы вставим его как
00:08:41
строка для заголовка нашей страницы, так что давайте прыгать
00:08:44
перейдем к браузеру, давайте обновим и
00:08:46
конечно, мы видим это изменение, но
00:08:48
конечно, мы хотим отобразить эту страницу
00:08:50
заголовок, поэтому нам нужно указать, где находится
00:08:54
отобразить заголовок нашей страницы в нашем
00:08:57
шаблон, который мы делаем с помощью пары фигурных
00:09:01
фигурные скобки, а внутри — наши данные
00:09:05
заголовок страницы свойств, поэтому, если мы вернемся к
00:09:08
браузер и обновите, мы видим Привет
00:09:10
посмотрим, давайте сделаем то же самое для нашего
00:09:13
контент, и давайте просто назовем этот контент
00:09:15
поэтому мы собираемся использовать шаблон
00:09:18
синтаксис для вывода содержимого сейчас, если мы этого не сделаем
00:09:22
укажите свойство данных контента, и мы
00:09:25
обновите страницу, конечно, нет
00:09:28
увидеть что-нибудь, потому что мы не поставляли
00:09:30
что-нибудь для контента для нашего
00:09:32
приложение, если мы откроем браузер
00:09:35
инструменты разработчика, мы увидим предупреждение
00:09:37
что к содержимому свойства был осуществлен доступ
00:09:40
во время рендеринга, но он не определен на
00:09:44
экземпляр так по существу, что это
00:09:46
означает, что мы использовали контент внутри
00:09:49
наш шаблон, но мы его не определяли
00:09:52
в нашем приложении, так что это легко
00:09:55
достаточно, нам просто нужно добавить
00:09:56
Свойство контента для наших данных и сейчас
00:09:59
всякий раз, когда мы возвращаемся в браузер, давайте
00:10:02
обновите, мы, конечно, видим содержимое
00:10:04
что мы ожидаем увидеть и
00:10:06
в консоли нет такого предупреждения
00:10:08
больше, поэтому мы создали наш первый
00:10:11
Просмотр приложения мы сделали это с помощью
00:10:14
просмотреть объект и вызвать создание приложения
00:10:17
создали экземпляр представления, который мы предоставили
00:10:20
объект параметров, который определяет данные
00:10:23
что наше приложение будет использовать мы
00:10:26
есть два фрагмента данных, у нас есть страница
00:10:28
заголовок и контент, который мы монтируем
00:10:31
это приложение к элементу, который имеет
00:10:34
идентификатор контента, и в нашем шаблоне мы
00:10:37
определяем, где мы хотим отображать
00:10:40
данные наших приложений в ближайшем будущем
00:10:42
урок, мы собираемся добавить еще один вид
00:10:45
приложение, это будет то, которое будет
00:10:48
управлять навигацией нашей веб-страницы
00:10:50
на предыдущем уроке мы создали очень
00:10:53
простое приложение для отображения некоторых
00:10:56
содержимое веб-страницы это
00:10:58
приложение состоит из двух частей
00:11:00
информация или две части данных
00:11:03
заголовок страницы и содержание, и мы
00:11:05
смонтировал это приложение в элементе
00:11:08
у которого есть идентификатор контента, который это
00:11:11
элемент div внутри этого элемента div
00:11:14
у нас есть свои шаблоны, где мы указываем
00:11:17
где мы хотим отобразить заголовок страницы
00:11:19
и содержание, поэтому в этом уроке я хочу
00:11:22
чтобы расширить это, я хочу создать
00:11:24
новое приложение «Просмотреть» теперь этого нет
00:11:27
означает, что нам нужно создать еще одну сеть
00:11:29
странице мы можем иметь столько просмотров
00:11:31
приложение находится внутри той же страницы
00:11:34
чего мы хотим и иногда хотим
00:11:36
несколько приложений, иногда мы этого не делаем
00:11:39
В этом уроке мы собираемся создать
00:11:41
приложение, которое будет управлять
00:11:44
навигация нашей веб-страницы, поэтому я собираюсь
00:11:47
вставьте это в разметку для нашей навигационной панели
00:11:49
это просто типичная навигационная панель начальной загрузки, если
00:11:53
заходим и смотрим в браузере там мы
00:11:55
иди, у нас есть бренд навигационной панели, который
00:11:57
просто мое мнение, и тогда у нас есть сингл
00:12:00
ссылка на дом, если вы не знакомы
00:12:02
загрузите, если вы хотите добавить больше
00:12:04
ссылки на панель навигации, вот это
00:12:07
неупорядоченный список, и каждый элемент списка
00:12:11
это будет элемент в этой навигационной панели, так что
00:12:14
здесь вы можете видеть, что это дом
00:12:16
ссылку, и если мы хотим добавить ссылки для
00:12:18
скажем о контакте, который нам понадобится
00:12:21
чтобы повторить ту же самую разметку, измените
00:12:24
текст и, конечно, нам бы тоже хотелось
00:12:28
укажите на другую ссылку, к которой мы доберемся
00:12:31
href позже, а сейчас я больше
00:12:33
обеспокоен созданием контента
00:12:36
дома и связаться, чтобы мы сделали
00:12:39
что с жестко закодированным HTML давайте использовать
00:12:42
вид, чтобы сделать это, так что давайте начнем с
00:12:45
создаем новое приложение, которое мы собираемся
00:12:47
чтобы продолжить и передать наши варианты
00:12:50
объект, где мы собираемся определить наш
00:12:53
данные, потому что наши данные будут определять
00:12:55
ссылки, которые есть в этом конкретном представлении
00:12:58
приложение будет генерировать так
00:13:00
давайте создадим свойство под названиемlinks, которое
00:13:03
будет массивом и правильно
00:13:04
сейчас мы будем работать с простыми
00:13:06
струны, чтобы у нас было дома
00:13:09
и контакт конечно нам нужно больше
00:13:12
информация, если они будут
00:13:14
реальные ссылки, которые мы получим к этому
00:13:16
хотя сейчас позже
00:13:18
все будет хорошо, и мы хотим
00:13:20
смонтируйте это приложение в нашу навигацию сейчас
00:13:24
сейчас это нормально, потому что я
00:13:26
не собираюсь иметь другую навигацию
00:13:28
элементы внутри страницы, однако, если
00:13:31
оказывается, что у нас есть несколько
00:13:33
элементы навигации, то нам нужно будет использовать
00:13:36
что-то более уникальное, но это
00:13:38
все будет хорошо, и теперь, когда у нас есть
00:13:40
установил это приложение в нашу навигацию
00:13:43
элемент, который означает, что внутри
00:13:45
элемент nav, у нас есть шаблон, и мы
00:13:48
можем определить, где мы хотим по существу
00:13:50
отображать текст наших ссылок, которые
00:13:53
конечно домой о контакте так что один
00:13:56
из способов, которыми мы можем это сделать, является
00:13:58
ну вот так мы можем использовать ссылки
00:14:02
массив, а затем укажите индекс
00:14:05
значение, которое мы хотим отобразить, чтобы дом был
00:14:08
индекс 0 примерно так же, как контакт с индексом один
00:14:11
индекс два и, конечно, если мы посмотрим это
00:14:14
в браузере мы не заметим
00:14:16
какие-либо различия в навигационной панели, кроме этого
00:14:20
это ужасный способ сделать это
00:14:22
потому что наши ссылки находятся в массиве и
00:14:26
каждый раз, когда мы работаем с массивом, мы
00:14:28
обычно хочется использовать цикл сейчас, если это
00:14:32
был бы обычным JavaScript, который мы могли бы сделать
00:14:34
это несколькими разными способами: один
00:14:36
из них было бы использовать 4 в цикле, поэтому
00:14:40
что мы могли бы сказать четыре ссылки в ссылках и
00:14:44
тогда внутри этого цикла мы бы
00:14:46
используйте ссылку, чтобы перейти к
00:14:49
стоимость дома или свяжитесь с нами
00:14:52
по существу может сделать то же самое с
00:14:55
вид, за исключением того, что мы не делаем этого внутри
00:14:57
нашего JavaScript вместо этого сказал, что мы делаем это
00:14:59
внутри нашего шаблона мы используем то, что
00:15:01
называется директивой представления, директивой представления
00:15:04
начинается с v Dash, а затем есть
00:15:06
много разных директив, в нашем случае мы
00:15:10
хотим использовать цикл более конкретно, мы
00:15:12
хочу использовать цикл for, и он будет
00:15:14
очень похоже на цифру 4 в цикле, так что мы
00:15:18
могу сказать, что для ссылки в ссылках сделайте этот код
00:15:23
и на самом деле это больше, чем просто сделать этот код, поэтому я
00:15:27
хочу внести ясность в то, что мы
00:15:30
используете V4 Direct, это для
00:15:33
Loop, но мы используем его на l i
00:15:37
элемент, поэтому мы хотим использовать его в
00:15:39
любой элемент, который мы хотим
00:15:41
повторно генерировать, если мы использовали V4 на
00:15:47
UL, который будет генерировать
00:15:49
несколько неупорядоченных списков, и мы не
00:15:51
хотим, чтобы нам нужно было несколько элементов Li
00:15:54
поэтому для каждой ссылки в ссылках мы хотим, хотим
00:15:59
работать с отдельной ссылкой, поэтому, когда
00:16:01
дело доходит до вывода значения, которое мы только что
00:16:04
используйте ссылку, которая определена внутри нашего
00:16:07
for Loop всякий раз, когда мы возвращаемся к
00:16:09
браузер и обнови мы видим то же самое
00:16:11
теперь результаты доказывают, что это действительно так
00:16:14
создание ссылок из наших данных о ссылках
00:16:18
давайте изменим текст здесь так, чтобы мы
00:16:20
возьми домой один около двух и свяжись
00:16:24
три, если мы вернемся в браузер и
00:16:26
Обновить дом около двух и связаться
00:16:29
три, это совсем другое
00:16:31
из чего-то вроде реакции, где вы
00:16:35
будет генерировать ваши элементы с помощью
00:16:36
JavaScript, а затем вывести результаты
00:16:39
в представлении шаблона используется очень
00:16:42
декларативный синтаксис, поэтому цель
00:16:46
что вы можете прочитать свой шаблон и
00:16:48
понять, что именно выводится
00:16:51
сейчас на следующем уроке мы собираемся
00:16:52
сделайте еще один шаг вперед и сгенерируйте
00:16:54
несколько реальных ссылок, чтобы мы могли
00:16:57
переходить на разные страницы Страницы внутри
00:16:59
наш сайт в этом уроке мы собираемся
00:17:02
использовать ссылки, которые мы создали
00:17:04
на предыдущем уроке, потому что как есть
00:17:06
прямо сейчас, ну, они просто в основном
00:17:08
текст, конечно, это настоящие ссылки
00:17:11
потому что у них есть значения href, но это
00:17:14
установите знак решетки или решетку, чтобы мы
00:17:18
вообще никуда не ходи, когда мы
00:17:19
нажмите на эти ссылки, мы хотим, чтобы пользователь
00:17:22
иметь возможность пойти домой или
00:17:24
Контактные страницы теперь помните, что наши
00:17:27
панель навигации контролируется представлением
00:17:30
приложение и ссылки генерируются
00:17:33
на основе данных этого приложения
00:17:35
данные — это массив, называемый ссылками, который имеет
00:17:39
просто простые строковые значения, поэтому, если мы хотим
00:17:42
для создания реальных ссылок, которые ведут на
00:17:45
реальная страница, нам нужно нечто большее, чем
00:17:47
нам нужны просто строки, действительно объект
00:17:51
потому что объект может точно описать
00:17:54
ссылка, она может дать нам текст, а также
00:17:57
URL-адрес, по которому мы хотим перейти, чтобы
00:17:59
Я собираюсь изменить массив ссылок, поэтому
00:18:01
что это массив объектов, каждый из которых
00:18:05
объект имеет свойство text и имеет
00:18:08
Свойство URL сейчас, потому что я изменил
00:18:10
этот массив нам нужен для обращения к нашему
00:18:13
шаблон, потому что мы выводили только
00:18:16
простое строковое значение с этой ссылкой
00:18:19
переменная, но теперь это объект, поэтому мы
00:18:22
хочу сказать ссылку на текст, потому что внутри
00:18:26
двойных фигурных скобок, которые мы можем использовать
00:18:28
любое выражение JavaScript, которое мы хотим
00:18:31
если бы по какой-то причине мы захотели
00:18:33
Выведите один плюс один, мы можем это сделать
00:18:36
потому что это действительный JavaScript
00:18:38
выражение конечно в браузере
00:18:40
мы увидим 222, это не очень
00:18:42
полезно, поэтому давайте изменим это обратно на
00:18:45
link.text, и если мы посмотрим на это
00:18:47
в браузере мы увидим
00:18:49
результаты, которые мы получили перед тем, как вернуться домой
00:18:51
и свяжитесь сейчас. Представление — это основа для
00:18:55
создание пользовательских интерфейсов и веб-сайтов
00:18:57
страница наш интерфейс HTML CSS и
00:19:01
JavaScript и когда дело доходит до
00:19:03
вывод HTML да, мы можем выводить текст
00:19:06
но это нечто большее, чем просто текстовое сообщение, которое мы
00:19:09
также необходимо иметь возможность устанавливать значения
00:19:12
атрибутов HTML, так как мы использовали
00:19:16
двойные фигурные скобки для вывода текста
00:19:18
вы можете подумать, что нам нужно будет
00:19:20
используйте это, чтобы сделать то же самое для
00:19:23
URL, так что давайте попробуем, давайте сделаем
00:19:26
это изменение, давайте перейдем в браузер
00:19:27
давайте обновим и подтянем HTML
00:19:31
инспектор, чтобы мы могли точно видеть
00:19:34
что загружается в браузере и
00:19:37
мы можем хорошо видеть URL-адрес ссылки внутри
00:19:41
парой фигурных скобок мы видим точную
00:19:44
строка, которую мы установили для этого атрибута
00:19:47
что имеет смысл, потому что это
00:19:49
это атрибут href, который нам нужен, чтобы сообщить нашему
00:19:52
Просмотр приложения, которое нам нужно обработать
00:19:55
это немного по-другому, это нужно
00:19:57
быть особенными, поэтому мы хотим сделать это
00:20:00
используйте директиву Vbind, тогда мы
00:20:04
за этим следует двоеточие, за которым следует
00:20:06
атрибут HTML, который мы хотим связать
00:20:09
значение в этом случае будет
00:20:12
href, а затем значение, которое мы присваиваем
00:20:15
к этому атрибуту является JavaScript
00:20:18
выражение, поэтому нам не нужен двойной
00:20:21
вместо фигурных скобок нам просто нужна ссылка
00:20:23
URL, чтобы всякий раз, когда мы возвращаемся к
00:20:26
браузер, мы увидим результаты
00:20:28
что мы ожидаем, где находится href
00:20:31
установлено в свойство URL нашей ссылки
00:20:36
объект теперь привязывает данные к атрибуту
00:20:39
очень-очень распространено, поэтому одна вещь, которая
00:20:42
вы найдете в большинстве
00:20:44
проекты, на которые ты смотришь, это нечто
00:20:47
вот так просто двоеточие, потому что мы связываем
00:20:50
много данных, имеет смысл иметь
00:20:52
сокращенный синтаксис для привязки этих данных к
00:20:55
атрибут, поэтому вместо того, чтобы набирать
00:20:58
из V-связывания двоеточия мы можем просто сказать двоеточие
00:21:01
за которым следует атрибут, и мы будем
00:21:04
получить тот же результат, и мы можем сделать это
00:21:07
для любого атрибута HTML, например
00:21:09
это ссылка, а ссылок должно быть больше
00:21:12
часто имеют атрибут title
00:21:15
что-то, что дает описание
00:21:18
ссылку, чтобы мы могли иметь
00:21:19
описание этой ссылки ведет на и
00:21:23
тогда мы можем поставить лайк на домашнюю страницу или
00:21:27
страница «О нас», но, конечно, нам нужно
00:21:30
это должно быть динамично, потому что это происходит
00:21:32
генерируется динамически, мы можем просто
00:21:35
используйте V-привязку к атрибуту заголовка, но
00:21:39
помните, что ценность этого
00:21:42
атрибут теперь является выражением JavaScript
00:21:44
так что просто обычный текст — это не
00:21:47
то, чего мы хотим, потому что это
00:21:48
это приведет к ошибке, это
00:21:51
синтаксическая ошибка, поскольку это недопустимый вариант
00:21:53
Выражение JavaScript вместо того, что мы
00:21:55
хочу, чтобы вывести строку динамически
00:21:58
струнное кольцо на основе текста
00:22:01
ссылку, поэтому я собираюсь сделать это, чтобы мы
00:22:04
будет использовать строку JavaScript
00:22:06
функция интерполяции для вывода строки
00:22:08
там написано, что эта ссылка ведет на и затем
00:22:11
мы можем использовать свойство text в нашей ссылке
00:22:14
объект и всякий раз, когда мы просматриваем его в
00:22:16
браузере мы не только увидим
00:22:19
Атрибуты href установлены правильно, но мы это сделаем
00:22:22
см. то же самое в названии этого
00:22:24
ссылка ведет на домашнюю страницу, и если мы
00:22:27
ознакомьтесь с информацией и свяжитесь
00:22:29
ссылки мы увидим нечто подобное
00:22:32
href установлено соответствующее значение как
00:22:35
а также атрибут title для каждого из них
00:22:38
этих ссылок, и теперь всякий раз, когда мы
00:22:40
нажмите на эти ссылки, если у нас есть
00:22:44
страница about.html, на которую мы перейдем
00:22:47
на этой странице то же самое верно и для контактов
00:22:49
а также дома, хотя я думаю, дома
00:22:53
вероятно, должен быть индексом, поэтому давайте сделаем
00:22:56
этот сменный дом будет индексом
00:22:58
HTML, так что давайте обновим страницу. Главная страница идет
00:23:02
индексировать о том, что будет хорошо, что бы
00:23:06
на странице «О нас» контакт переходит на
00:23:09
страница контактов, теперь есть еще кое-что
00:23:11
и это сейчас не так важно
00:23:14
потому что данные, которые мы предоставляем
00:23:16
наша панель навигации статична, мы не меняем
00:23:20
эти данные, однако, когда мы их изменяем
00:23:23
просмотр данных будет автоматически
00:23:26
изменить то, что видно внутри
00:23:28
браузер, нам не нужно ничего делать
00:23:30
View делает это за нас, но нам нужно
00:23:33
помогите просмотреть, чтобы он мог определить, какие
00:23:38
объект, который необходимо обновить, поэтому мы
00:23:41
необходимо предоставить ключ или уникальный
00:23:44
идентификатор для каждого из LI
00:23:48
элементы, которые мы здесь генерируем
00:23:50
с директивой V4, поэтому мы делаем это с помощью V
00:23:54
привязка ключа, и это должен быть
00:23:57
уникальная ценность для каждого отдельного Ли
00:24:01
элемент, который генерируется или лучше
00:24:04
способ мышления об этом уникален
00:24:06
идентификатор для каждого элемента в ссылках
00:24:10
массив и одна вещь, которая уникальна, это
00:24:13
индекс элементов массива
00:24:16
потому что нулевой индекс впереди дома
00:24:18
индекс единицы примерно соответствует индексу
00:24:21
из двух - для контакта, чтобы мы могли использовать
00:24:23
индекс как ключ, и мы можем это сделать
00:24:27
очень легко, изменив наш цикл for так
00:24:30
что мы не только будем работать
00:24:32
с объектом ссылки, но мы также получаем
00:24:35
индекс этого элемента в массиве, поэтому
00:24:38
мы можем связать это с ключом и
00:24:42
с точки зрения пользователя это не так
00:24:44
замечу что-то другое, это
00:24:46
предназначен исключительно для того, чтобы помочь просмотру сделать свое дело
00:24:49
то, что за кадром, сейчас в следующем
00:24:51
урок, который мы собираемся перенести
00:24:53
страницу в так называемую одну страницу
00:24:56
приложение, по сути, это одна страница
00:24:59
загружено в браузер и контент
00:25:01
изменения в зависимости от пользователя
00:25:04
взаимодействие, например, нажав на
00:25:06
одна из ссылок изменит
00:25:09
контент, который отображается в
00:25:11
браузер в этом уроке мы собираемся
00:25:13
превратить нашу веб-страницу в одну страницу
00:25:16
приложение, и мы можем сделать это
00:25:18
различными способами, используя
00:25:21
просмотреть, однако, со всем, что мы
00:25:22
мы говорили до сих пор, вероятно,
00:25:25
самое простое, что можно сделать, это просто
00:25:27
объединить два наших экземпляра представления в один
00:25:31
так что у нас есть только один объект данных
00:25:34
с которым мы будем работать
00:25:36
делает все намного проще сделать это
00:25:40
этот переход будет
00:25:41
относительно просто, все, что нам нужно сделать, это
00:25:44
возьмите данные из одного экземпляра и поместите
00:25:47
это внутри другого, так что давайте возьмем
00:25:50
ссылки из нашего экземпляра навигации, давайте вставим
00:25:53
что внутри данных для нашего контента
00:25:57
давайте удалим экземпляр навигации, а затем
00:26:00
нам просто нужно изменить селектор CSS
00:26:04
что мы перешли к методу Mount, который мы
00:26:07
можем просто передать в теле, чтобы мы
00:26:09
по сути, смонтируйте наш экземпляр представления в
00:26:13
тело этого приложения, так что это
00:26:16
будет охватывать как навигацию, так и наш контент
00:26:19
и тогда возникает вопрос, как сделать
00:26:21
нам нужно структурировать наши данные, потому что мы
00:26:25
нужно нечто большее, чем просто набор ссылок и
00:26:28
заголовок и содержание одной страницы, которые нам нужны
00:26:30
ссылка заголовок страницы и содержание
00:26:33
для каждой отдельной страницы, которую мы хотим
00:26:36
дисплей, и у нас есть три главные страницы
00:26:38
о и контакты, поэтому я думаю, что делает
00:26:41
самый смысл в том, чтобы существенно изменить
00:26:44
наши данные в массив страниц, и каждая
00:26:49
одна из этих страниц будет
00:26:51
объект, имеющий ссылку, содержащую текст
00:26:54
и URL-адрес, у которого есть заголовок страницы и
00:26:58
содержимое этой страницы сейчас, потому что
00:27:01
мы вносим это изменение, нам действительно нужно
00:27:03
обращайтесь к нашему шаблону, особенно когда он
00:27:05
доходит до создания ссылок в нашей навигации
00:27:08
бар, поэтому мы больше не работаем с
00:27:10
вместо этого мы работаем с
00:27:13
отдельная страница внутри страниц, которые мы можем
00:27:17
оставьте индекс в покое, потому что нам нужно
00:27:19
свяжите это с ключом нашего списка Ли
00:27:23
элементы, но везде мы использовали
00:27:25
эту ссылку все, что нам нужно сделать, это предварительно закрепить
00:27:28
что со страницей Dot и все должно быть
00:27:31
работать так же, по крайней мере, в отношении навигации
00:27:34
обеспокоен, так что давай проверим вменяемость
00:27:36
пойдем в браузер, давай обновим
00:27:37
и да, у нас есть ссылки, так что теперь мы просто
00:27:41
нужно изменить контент, который происходит
00:27:45
будет отображаться всякий раз, когда мы нажимаем на
00:27:46
эти ссылки, так что это означает, что нам нужно
00:27:49
чтобы настроить событие клика для этих ссылок
00:27:52
и это очень легко сделать внутри
00:27:55
Посмотреть, это может выглядеть немного неправильно
00:27:57
потому что это чем-то напоминает
00:27:59
События уровня дома 0 сейчас, если вы этого не сделаете
00:28:02
знаком с этой терминологией раньше
00:28:04
там была какая-то спецификация Дома, кстати
00:28:07
то, что мы настроили обработчики событий, было
00:28:10
через HTML каждый элемент HTML имел
00:28:14
атрибуты, такие как щелчок или мышь
00:28:18
или что-то в этом роде, что позволило бы
00:28:21
мы настроили событие для этого элемента, чтобы
00:28:25
для события клика у нас будет клик
00:28:27
а затем значение этого атрибута
00:28:29
будет какое-то выражение JavaScript, которое
00:28:31
будет выполняться всякий раз, когда пользователь нажимает
00:28:33
для этого элемента с представлением мы используем представление
00:28:37
директиву V on, мы следуем, что
00:28:40
с двоеточием, а затем у нас есть имя
00:28:43
события, которое мы хотим обработать в
00:28:45
в этом случае это будет щелчок, если это
00:28:47
было какое-то другое событие, например, Mouse over или
00:28:51
Уберите мышь или введите с помощью мыши что-нибудь вроде
00:28:54
что мы будем использовать только название этого
00:28:57
событие, но мы бы добавили к нему букву V
00:28:59
в директиве теперь есть сокращение
00:29:03
синтаксис вместо того, чтобы писать V в двоеточии, мы
00:29:07
можно просто использовать знак перед событием
00:29:10
имя, поэтому при нажатии выполняется настройка щелчка
00:29:13
обработчик событий для этого элемента, который мне нравится
00:29:16
думайте об этом как о действии, а затем нажмите и
00:29:19
тогда нам просто нужно указать код
00:29:21
что он будет выполняться всякий раз, когда мы
00:29:22
нажимайте на эту ссылку всякий раз, когда мы нажимаем на
00:29:24
ссылку, которая нам нужна, чтобы иметь возможность отслеживать
00:29:27
ссылка на страницу, на которую мы нажали, поэтому
00:29:30
нам нужно какое-то другое свойство данных, которое мы
00:29:32
можно использовать для отслеживания активной страницы и
00:29:35
давайте просто назовем это свойство активным
00:29:37
страницу и имеет смысл инициализировать
00:29:40
это наша домашняя страница, так что скажем так
00:29:43
мы собираемся отслеживать это на основе
00:29:46
индекс, поэтому наша домашняя страница находится под индексом
00:29:49
ноль, если массив страниц равен
00:29:52
обеспокоены тем, что это будет индекс один и
00:29:55
тогда контакт будет иметь номер два, так что
00:29:57
всякий раз, когда мы нажимаем на эти ссылки, мы хотим
00:30:01
изменить активную страницу на индекс для
00:30:06
данную страницу и поэтому, когда дело доходит до
00:30:09
отображение нашего мошеннического контента, который мы будем использовать
00:30:11
Pages мы будем использовать синтаксис индекса, чтобы
00:30:14
мы можем использовать активную страницу и тогда это
00:30:17
предоставит нам доступ к заголовку этой страницы
00:30:19
как и содержание так еще здравомыслие
00:30:24
проверь зайдём в браузер дадим
00:30:26
это всего лишь кадр, давайте обновим страницу
00:30:29
поскольку домашняя страница является нашей страницей по умолчанию, мы
00:30:32
вижу, что этот контент
00:30:33
автоматически отображается, поэтому давайте нажмем
00:30:35
по ссылке «О нас» мы могли видеть очень
00:30:38
кратко, что содержание изменилось, но
00:30:40
обратите внимание, что мы перешли к
00:30:43
abouts.html — это URL-адрес, который был
00:30:46
указано для этой ссылки, и мы не
00:30:48
хочу этого, потому что весь наш контент
00:30:50
теперь загружается через JavaScript, поэтому
00:30:52
мы хотим запретить веб-браузеру
00:30:55
переход к любому указанному URL-адресу
00:30:58
в href, и если бы это было просто
00:31:01
обычный прослушиватель событий Dom, который мы могли бы сделать
00:31:04
что использование объектов событий предотвращает
00:31:06
метод по умолчанию, но поскольку это просмотр, мы
00:31:09
иметь более декларативный способ сделать
00:31:12
что всякий раз, когда мы указываем при нажатии
00:31:15
директиву, мы можем последовать за ней с помощью
00:31:18
DOT, и тогда мы сможем использовать это для предотвращения
00:31:20
модификатор this по сути говорит, что мы
00:31:23
хотите запретить браузеру
00:31:25
переход к href всякий раз, когда пользователь
00:31:29
нажимает на эту ссылку, чтобы с этим в
00:31:32
место, где мы можем вернуться в браузер
00:31:33
давайте обновим страницу каждый раз, когда мы
00:31:36
нажмите «О», мы увидим, что
00:31:37
браузер не перешел на
00:31:40
about.html, но контент загрузился
00:31:43
что мы указали, а затем всякий раз, когда мы
00:31:46
нажмите на контакт, и мы увидим то же самое
00:31:48
вещь, давай нажмем на домашнюю страницу
00:31:51
свяжитесь с нами, и мы сможем продолжать это делать
00:31:55
и это будет работать так же, как мы
00:31:57
этого и следовало ожидать, и это один из
00:31:59
все самое лучшее в Vue и на самом деле
00:32:00
это не просто представление, а любая платформа пользовательского интерфейса
00:32:04
Я имею в виду реакцию angular svelt Alpine
00:32:07
сейчас их довольно много, но мы нет
00:32:10
больше не придется писать код, который
00:32:13
на самом деле меняет контент вместо всего
00:32:16
нам нужно изменить данные, а затем
00:32:20
наше приложение отреагирует на это
00:32:22
изменение данных, например, единственное
00:32:25
часть данных, которую мы изменили, была
00:32:27
значение активной страницы при каждом нажатии
00:32:30
по ссылке мы изменили это значение и
00:32:33
из-за этого очень простого изменения представления
00:32:35
автоматически обновлял контент, который
00:32:38
был загружен в Дом, потому что наш код
00:32:41
сказал загрузить заголовок страницы
00:32:43
активную страницу и загрузить содержимое
00:32:46
активная страница, и именно здесь
00:32:48
власть и популярность этих
00:32:51
Фреймворки появились, потому что мы не
00:32:53
больше озабочен фактическим обновлением
00:32:56
фреймворк Dom делает это
00:32:58
автоматически для нас все, что мы должны сделать
00:33:01
настроен пользовательский интерфейс для отображения контента
00:33:05
что мы хотим, а затем просто изменяем
00:33:08
данные или изменить состояние
00:33:10
приложение и просмотр будут автоматически
00:33:13
обновите Дом для нас
00:33:15
когда дело доходит до создания динамического пользователя
00:33:18
интерфейсы, это гораздо больше, чем
00:33:19
просто меняю контент или обновляю
00:33:22
контент много раз мы хотим изменить
00:33:24
или обновите стиль, примененный к
00:33:27
HTML-элементы, такие как, например, bootstrap
00:33:31
дает нам класс под названием active для нашего
00:33:34
навигационные ссылки, чтобы мы могли указать на
00:33:37
пользователь, который считает домашнюю ссылку или информацию
00:33:40
ссылка или ссылка на контакты активна, это
00:33:44
просто визуальная подсказка, которую мы можем предоставить
00:33:46
пользователь, и сейчас мы
00:33:48
не используем этот класс, потому что когда мы
00:33:51
посмотрите на нашу разметку, все что мы указали
00:33:53
это класс навигационных ссылок для этих ссылок
00:33:56
мы хотим включить активный, но
00:34:00
только когда активная страница равна
00:34:05
индекс данной страницы, поэтому нам нужно
00:34:09
иметь возможность добавить какое-то условное выражение
00:34:12
оператор, чтобы, если активная страница
00:34:15
равен индексу, то мы будем использовать
00:34:20
активный класс, ты знаешь, если мы собираемся
00:34:22
использовать троичное выражение было бы
00:34:24
выглядеть примерно так, мы можем сделать
00:34:26
это очень просто с помощью Vbind, но я
00:34:31
собираюсь использовать сокращение в классе
00:34:34
теперь это будет выглядеть немного странно
00:34:36
потому что мы не только используем класс
00:34:40
атрибут это класс HTML
00:34:43
атрибут, но мы также собираемся использовать
00:34:46
директиву связывания V для класса, чтобы вы могли
00:34:49
подумайте об этом, поскольку я хочу применить эти
00:34:53
Классы CSS всегда к элементу
00:34:56
используя атрибут класса HTML, а затем
00:34:59
для классов, которые вы хотите применить
00:35:02
условно вы будете использовать привязку V, поэтому
00:35:06
Синтаксис для этого будет выглядеть
00:35:08
немного странно, потому что мы не используем
00:35:10
троичные выражения или что-то вроде
00:35:13
вместо этого у нас есть объект
00:35:15
и свойства этих объектов
00:35:18
классы CSS, к которым мы хотим применить
00:35:22
этот элемент, поэтому в данном случае мы хотим
00:35:24
примените активный класс, и значение будет
00:35:28
это будет наше условие, поэтому
00:35:30
мы хотим применить активный класс, когда
00:35:33
активная страница равна индексу
00:35:39
данная страница, так что давайте просто возьмем
00:35:42
взгляните на синтаксис еще раз, потому что, как я
00:35:43
сказал, что это выглядит немного странно
00:35:45
особенно если вы собираетесь использовать
00:35:48
оператор if или троичный или
00:35:50
что-то в этом роде, поэтому мы используем
00:35:52
Директива связывания V для класса, и мы
00:35:55
предоставление объекта, на котором находится имущество
00:35:58
это класс CSS, который мы хотим применить
00:36:01
к элементу, а затем значение
00:36:04
это свойство является условным
00:36:05
заявление, которое определит, является ли это
00:36:09
Класс CSS применяется, и все готово.
00:36:12
мы можем зайти в браузер, мы можем обновить
00:36:15
наша страница страница и вы можете автоматически
00:36:18
видишь, это немного сложно сказать из-за
00:36:20
к стилю здесь, но вы можете видеть это
00:36:22
дома немного темнее, чем здесь
00:36:24
в контакте всякий раз, когда мы нажимаем «О нас»
00:36:27
снова становится немного темнее, когда мы
00:36:29
нажмите на контакт, это немного
00:36:31
темнее, теперь мы можем сделать это гораздо больше
00:36:34
Очевидно, по крайней мере, на мой взгляд, если мы
00:36:36
смени его на темную панель навигации, и я пойду
00:36:40
изменить классы CSS из панели навигации
00:36:43
Lite и BG светлый на темную панель навигации и BG
00:36:47
темно, если мы обновим страницу сейчас, мы можем
00:36:49
обязательно увидим, что дом активен, если мы
00:36:52
нажмите «О нас», если мы нажмем «Связаться с нами»
00:36:55
видим, что они активны, и мы можем
00:36:57
проверьте эти элементы, и мы сможем
00:36:59
на самом деле видеть HTML автоматически
00:37:02
обновление, вот элемент a, который у нас есть
00:37:06
класс навигационной ссылки и активен, так что продолжайте
00:37:09
ты смотришь на это всякий раз, когда я нажимаю на
00:37:11
дома он будет автоматически обновляться
00:37:14
класс CSS
00:37:16
так что active больше не применяется к
00:37:20
ссылку для контакта, но если мы возьмем
00:37:23
посмотри ссылку на дом ну вот оно
00:37:26
вот здесь, так что это дает мне идею
00:37:28
Я хочу иметь возможность переключать панель навигации
00:37:31
от света к темноте, так что давайте сделаем это
00:37:35
знаю, как это сделать теперь, когда мы можем связать
00:37:37
CSS-классы, но нам нужно иметь возможность
00:37:40
отслеживать, показываем ли мы свет
00:37:43
фон или темный фон, так что давайте
00:37:45
добавьте еще одну дату собственности и давайте
00:37:48
просто назовите это, используйте темную панель навигации, так что
00:37:52
конечно, если это правда, то навигационная панель
00:37:54
будет темно, если это ложь, то это будет
00:37:57
будь легким, давайте инициализируем его как false
00:37:59
а это значит, что мы собираемся
00:38:02
измените атрибуты нашего класса HTML так, чтобы
00:38:06
мы не применяем подсветку навигационной панели
00:38:09
Фоновый свет вместо этого мы хотим динамически
00:38:13
применить соответствующие классы на основе
00:38:16
по значению этого используйте темную панель навигации, поэтому
00:38:20
еще раз мы собираемся v-связать
00:38:24
класс, который мы собираемся передать в объект
00:38:26
дела пойдут немного лучше
00:38:28
здесь сложно, потому что классы CSS, которые
00:38:30
мы хотим применить дефисы, которые
00:38:33
недопустимо в идентификаторах JavaScript
00:38:36
однако мы можем использовать строку как
00:38:39
имя свойства, мы также можем применить несколько
00:38:42
занятия одновременно, чтобы это
00:38:45
выглядит так, что мы хотим применить
00:38:48
Подсветка навигационной панели и подсветка фона при использовании темноты
00:38:53
navbar имеет значение false, и тогда мы, по сути,
00:38:56
хочу сделать то же самое для темноты
00:38:59
версия, но при использовании панели навигации это правда
00:39:03
еще раз мы изменим эти значения
00:39:05
чтобы панель навигации была темной, а фоновая картинка темной, так это выглядит
00:39:09
еще более странно, чем раньше, так что давай просто
00:39:11
уделите немного времени, чтобы поговорить об этом
00:39:14
синтаксис, поэтому мы еще раз связываем
00:39:16
наши классы, но поскольку эти классы используют
00:39:20
дефисы в их имени, мы не можем использовать их
00:39:23
как обычные идентификаторы JavaScript, поэтому наши
00:39:27
имя свойства обозначается строкой
00:39:30
мы используем два класса CSS, разделенные
00:39:35
пробел в качестве имени свойства внутри
00:39:38
строка, а затем условное выражение
00:39:40
значение состоит в том, чтобы не использовать темную панель навигации, поэтому, когда
00:39:45
это неверно, мы используем подобные классы
00:39:48
когда это правда, мы используем темные классы
00:39:52
так что все, что нам нужно, это
00:39:55
кнопку, на которую нужно нажать, чтобы мы могли переключаться
00:39:58
эти классы, поэтому я собираюсь добавить форму
00:40:01
после неупорядоченного списка нашей навбара
00:40:05
ссылки давайте добавим класс d-flex и
00:40:09
внутри этой формы у нас будет просто
00:40:11
простая кнопка, давайте настроим
00:40:13
классы CSS, чтобы мы сделали это
00:40:16
гармонировать с бутстрапом, поэтому мы будем использовать
00:40:19
застежка-пуговица, давайте также использовать кнопку
00:40:21
первично, нам не нужно указывать
00:40:24
тип, но нам нужно обработать
00:40:26
событие click, так что давайте сделаем это с помощью at
00:40:29
нажмите, давайте продолжим и предотвратим
00:40:31
по умолчанию, поскольку это внутри формы
00:40:33
ты знаешь, что я не знаю
00:40:35
знать, каким будет действие по умолчанию, поэтому
00:40:37
не помешает добавить предотвращение
00:40:41
модификатор этого события и то, что мы хотим
00:40:43
нужно изменить значение использования темного цвета
00:40:46
навбар так, чтобы он был равен своему
00:40:50
наоборот, и с помощью этого простого изменения мы
00:40:52
можем вернуться в браузер, мы можем
00:40:55
обновить страницу, которая отображается по умолчанию
00:40:57
световая полоса, о, было бы полезно
00:41:01
есть текст, скажем так, не так ли?
00:41:03
переключить панель навигации, так что теперь давайте обновим
00:41:06
по умолчанию — светлый фон, если мы
00:41:08
нажмите на панель переключения навигации, которая должна
00:41:10
измените его на темный, и он сделает
00:41:13
активные занятия применяются правильно
00:41:16
давайте вернемся к навигационной панели освещения
00:41:18
еще раз активный класс правильно
00:41:21
применил и все работает как надо
00:41:24
теперь надо, давай сделаем это, давай удостоверимся
00:41:26
что это сработает, если мы установим
00:41:28
значение по умолчанию для использования темной панели навигации
00:41:31
это правда, и, конечно, мы так и сделаем
00:41:34
написал это, так что вот оно, установив
00:41:37
по умолчанию установлено значение True, наша панель навигации
00:41:39
сейчас темно, все остальное работает
00:41:42
то же самое мы можем переключить на свет
00:41:44
но я думаю, что лично мне нравится темнота
00:41:46
поэтому я оставлю это так
00:41:49
предыдущий урок, о котором вы узнали
00:41:51
один из способов привязки CSS
00:41:53
классы для элемента, и да, я сказал один
00:41:56
способов, потому что когда дело доходит до
00:41:58
работая со стилем, вы можете применить
00:42:01
стиль различными способами в
00:42:04
на предыдущем уроке мы использовали объект
00:42:06
где свойства были CSS
00:42:08
классы, которые мы хотели применить, а затем
00:42:11
их ценности были условными
00:42:14
выражение, которое определяет, является ли
00:42:15
на самом деле применяются не эти классы
00:42:18
к элементу на следующем уроке мы
00:42:21
рассмотрим, как теперь использовать массивы в
00:42:24
на этом уроке я хочу сосредоточиться на этом
00:42:26
выражение, потому что пока оно работает, я бы
00:42:28
привести аргумент, что это не
00:42:30
проще всего быстро прочитать и понять
00:42:33
что происходит вместо того, что я хочу
00:42:35
сделать, это извлечь это в объект
00:42:40
что мы тогда просто сошлемся здесь
00:42:43
поэтому мы могли бы назвать это классами навигационной панели и
00:42:46
это делает нашу жизнь намного проще
00:42:48
пролистав это, мы увидели, окей
00:42:49
классы навигационной панели применяются и
00:42:52
тогда позже мы сможем посмотреть на фактическое
00:42:53
детали внутри нашего кода, чтобы вы могли
00:42:56
думаю, что нам нужно будет определить это
00:42:59
Объект классов navbar в наших данных и
00:43:02
да, технически мы можем это сделать, но это
00:43:04
не собираемся вести себя так, как мы
00:43:06
ожидайте этого, на самом деле этого не произойдет
00:43:08
вообще работает, но давайте посмотрим на это нет
00:43:11
работать и говорить о том, почему это не так
00:43:13
поработаем, а потом посмотрим, как можно
00:43:16
заставить это работать, поэтому первое, чего я хочу
00:43:18
по сути, это превратить это из двух
00:43:22
строки кода в четыре строки, потому что я
00:43:26
лично я думаю, что это намного проще
00:43:28
прочитать и понять, если мы что-то сделаем
00:43:31
вот так, чтобы каждый человек
00:43:34
свойство является собственным для каждого отдельного CSS
00:43:37
класс, это просто мое предпочтение, но я
00:43:40
не против написать лишние строки кода
00:43:42
если это значит, что мне не обязательно приходить
00:43:44
вернемся к этому через три месяца и подумаем
00:43:46
что я здесь делаю, ох, да, так
00:43:49
сейчас это наша цель, потому что мы
00:43:53
внутри JavaScript теперь мы не
00:43:55
внутри нашего шаблона нам нужно
00:43:57
придерживаться правил синтаксиса JavaScript
00:44:00
использование темной панели навигации – это не просто
00:44:04
переменная, это свойство внутри нашей
00:44:08
приложение, потому что вот оно оно
00:44:10
определено прямо здесь, внутри этого объекта
00:44:13
поэтому нам нужно сказать, что эта точка использует темный цвет
00:44:17
навигация, и все будет хорошо
00:44:20
мы можем сохранить это, мы можем пойти в
00:44:22
браузер, который мы можем обновить, и всякий раз, когда мы
00:44:25
нажмите на переключатель, ничего не происходит, теперь это
00:44:28
не потому, что это ошибка, мы можем
00:44:30
подними консоль и мы не пойдём
00:44:32
чтобы увидеть какие-либо ошибки, мы увидим
00:44:35
это предупреждение и единственная причина, по которой мы
00:44:37
получают это, потому что этот скрипт
00:44:39
находится внутри тега body, и мы имеем
00:44:41
создал приложение просмотра, подключенное к
00:44:44
тело, чтобы мы могли видеть, что это происходит
00:44:46
игнорируется, так что все в порядке, нам все равно
00:44:48
об этом, но когда я нажимаю на
00:44:50
кнопка переключения ошибок нет
00:44:53
появляется в консоли, так что это не так
00:44:56
работает, потому что есть ошибка
00:44:58
не работает, потому что мы использовали темный цвет
00:45:03
свойство navbar, потому что этот код
00:45:07
инициализация данных нашего приложения, это
00:45:10
не настраивая его на реагирование или
00:45:12
что-то подобное, это просто
00:45:14
инициализация всех значений для этих
00:45:17
свойства, так что это означает, что всякий раз, когда
00:45:21
выполняется код для создания этой навигационной панели
00:45:23
объект классов, который использует фактический
00:45:26
стоит использовать темную панель навигации, но это будет
00:45:30
по сути быть переведено на это так
00:45:33
что это будет не ложь и следующее
00:45:36
строка не будет ложной, что, конечно,
00:45:38
это правда, а затем для темной панели навигации это
00:45:41
было бы ложью и так далее и тому подобное
00:45:44
это фактические логические значения, которые
00:45:47
применяются к этим свойствам
00:45:49
и поэтому Vue ничего не думает
00:45:52
что он должен реагировать на внутреннюю часть
00:45:54
браузер всякий раз, когда мы нажимаем на переключатель
00:45:57
Кнопка использования свойства темной панели навигации
00:46:01
меняется, но это не проблема
00:46:03
проблема в том, что фактическое логическое значение
00:46:05
применяется к этим свойствам, поэтому
00:46:08
мы можем обойти это
00:46:10
используя так называемый компьютерный
00:46:13
собственность, это просто собственность, которая
00:46:16
оценивается на лету и мы создаем
00:46:19
вычисляемые свойства с помощью
00:46:21
рассчитанный вариант, поэтому у нас есть вариант
00:46:24
называемые данными, которыми мы были
00:46:26
используя до сих пор мы собираемся использовать
00:46:29
расчетный вариант это еще один
00:46:32
объект, в котором находятся свойства
00:46:34
функции, которые будут выполняться, так что это
00:46:38
где мы определим наши классы навигационной панели
00:46:41
но это будет функция
00:46:43
поскольку это вычисляемое свойство, оно
00:46:45
должен выполниться, чтобы сгенерировать свой
00:46:49
значение значение и все, что нам нужно сделать, то
00:46:51
по сути, удаляет этот код из нашего
00:46:54
данные, и мы хотим вернуть их внутрь
00:46:58
этого вычисленного свойства, поэтому путь
00:47:01
то, что это работает сейчас, остается за кадром
00:47:03
View знает, что использование темной панели навигации является
00:47:07
что-то, на что он должен реагировать и
00:47:09
потому что мы используем его внутри этого
00:47:12
вычисленное свойство, тогда оно будет
00:47:14
автоматически вычислить это значение
00:47:16
всякий раз, когда используются изменения темной панели навигации, поэтому мы
00:47:20
можно вернуться в браузер, а теперь давай
00:47:22
обновлять страницу и каждый раз, когда мы нажимаем
00:47:24
при переключении мы видим, что эта функциональность
00:47:26
вернулся, потому что мы нажимаем на это
00:47:29
кнопка меняет значение использования темного цвета
00:47:33
панель навигации и поскольку мы использовали темный цвет
00:47:36
панель навигации внутри этого вычисляемого свойства
00:47:39
называемые классами навигационной панели, это будет
00:47:41
автоматически пересчитать это свойство
00:47:45
по сути вызывает эту функцию для
00:47:47
вычислить его. Возвращает объект, который
00:47:51
затем используется для привязки к классу на нашем
00:47:55
Навигация Сейчас на следующем уроке мы собираемся
00:47:57
посмотреть, как мы можем связать классы CSS
00:47:59
используя массив и как мы можем получить
00:48:02
та же функциональность без использования
00:48:04
вычисленное свойство на предыдущем уроке
00:48:07
Я познакомил вас с вычисляемыми свойствами
00:48:10
что хорошо, это свойства, которые
00:48:14
обрабатываются или вычисляются «на лету» и
00:48:17
мы использовали вычисленное свойство для упрощения
00:48:19
наш шаблон, чтобы все, что нам нужно было сделать
00:48:22
было привязано это свойство классов навигационной панели
00:48:25
и это просто вычисленный
00:48:27
свойство, возвращаемое значение которого меняется
00:48:30
на основе значения используемой панели навигации Arc
00:48:33
и это все хорошо вычислено
00:48:35
свойства — замечательная функция, но
00:48:38
мы также можем сделать то же самое без
00:48:40
используя вычисленные свойства, потому что
00:48:42
вместо использования объекта мы можем использовать
00:48:46
массив для привязки классов, поэтому первым делом
00:48:50
нам нужно просто определить массив
00:48:52
а затем отдельные элементы внутри
00:48:55
этого массива будут классы CSS
00:48:57
которые применяются к элементу, поэтому для
00:49:00
Например, если нам нужна темная панель навигации, мы
00:49:02
в темной панели навигации был бы один элемент
00:49:05
в массиве, а затем темный фон будет
00:49:08
другой, чтобы мы могли перепрыгнуть
00:49:10
обновите браузер и вуаля у нас есть
00:49:12
эту функциональность, но, конечно, если мы
00:49:15
нажмите на кнопку переключения, что нет
00:49:17
дольше работает, потому что мы жестко запрограммировали
00:49:20
теперь темные классы CSS в нашей навигационной панели
00:49:25
без написания какого-либо дополнительного кода мы
00:49:28
можно уйти, сделав что-то вроде
00:49:30
это для того, чтобы мы могли проверить значение
00:49:32
используйте темную панель навигации, и тогда у нас будет
00:49:35
троичное выражение, так что если это
00:49:38
правда, тогда да, мы бы использовали эти темные
00:49:41
занятия, иначе мы бы использовали свет
00:49:44
занятия, и я знаю, что есть ты знаешь
00:49:46
другие классы CSS, которые нам нужно применить
00:49:48
Я поленюсь и не буду их применять
00:49:51
все, что нам нужно увидеть, это то, что
00:49:53
цвет фона изменится, так что давайте
00:49:55
обновим, давай переключимся, и у нас это есть
00:49:59
снова функциональность, однако можно сделать
00:50:01
аргумент, что наши шаблоны могут быть
00:50:04
немного чище, я имею в виду, да, это так
00:50:06
довольно чисто, но чем больше классов CSS мы
00:50:09
добавьте еще больше головной боли
00:50:12
попытаться расшифровать все это сейчас
00:50:15
прежде чем мы продолжим, я хочу отметить
00:50:16
что это выражение предназначено только для одного
00:50:20
элемент массива, если бы мы захотели
00:50:23
применять любые другие классы CSS и всегда
00:50:26
примените их, например, панель навигации и
00:50:30
панель навигации развернуть LG, мы могли бы сделать это просто
00:50:34
хорошо, вообще-то, давай продолжим и сделаем это
00:50:36
почему бы и нет, просто для проверки здравомыслия, давай
00:50:39
вернитесь в браузер, мы увидим
00:50:41
та же функциональность, что и раньше
00:50:42
все статические классы CSS по-прежнему
00:50:46
применяется, потому что это будет выглядеть
00:50:48
очень разные, но мы все еще можем переключаться
00:50:50
между светом и тьмой, но я
00:50:53
хотеть что-то сделать не обязательно
00:50:55
причудливее, но было бы круто сделать
00:50:58
что-то вроде этого там, где мы бы
00:51:01
есть наши отдельные элементы, но тогда мы
00:51:04
хотелось бы иметь свойство темы и
00:51:06
тогда мы бы изменили это значение
00:51:09
тему, чтобы панель навигации и
00:51:13
цвета фона будут меняться в зависимости от
00:51:15
на эту тему, но, конечно, все
00:51:17
иначе все было бы хорошо, теперь это нас отвлечет
00:51:20
от использования этого вычисляемого свойства, поэтому
00:51:24
давайте продолжим и удалим это тоже
00:51:27
уводит нас от использования этой использованной темной
00:51:29
вместо панели навигации у нас будет свойство
00:51:33
назвал тему туда, где мы могли
00:51:35
инициализируйте его как светлый или темный на самом деле
00:51:37
не имеет значения, давай продолжим и давай
00:51:39
начнем со света, давай освежимся, ох
00:51:42
где-то ошибка, возможно
00:51:44
синтаксическая ошибка и вот это правильно
00:51:47
здесь, внутри моего шаблона, мне нужно
00:51:50
поставь галочку закрытия, так что поехали
00:51:53
назад давай обновим выглядит как свет
00:51:55
Панель навигации, если мы изменим тему на темную, ты
00:51:59
увижу темную панель навигации, вот и поехали, так что
00:52:02
теперь нам просто нужно написать код
00:52:03
это изменит ценность
00:52:05
тема, теперь мы можем сделать это, как мы уже сделали
00:52:09
для использования свойства dark navbar в этом
00:52:12
всякий раз, когда мы нажимаем кнопку переключения
00:52:14
мы могли бы сделать что-то вроде этого, где
00:52:16
мы присвоим новое значение темы
00:52:18
исходя из того, какова его текущая стоимость, поэтому
00:52:22
что если тема легкая, то мы хотим
00:52:25
измените его значение на темное, иначе оно
00:52:30
будет светло и это будет
00:52:32
дайте нам ту функциональность, которой мы являемся
00:52:34
после однако еще раз я бы сделал
00:52:37
аргумент, что это усложняет нашу
00:52:39
шаблоны, теперь нам нужно это расшифровать
00:52:42
было бы здорово, если бы мы могли
00:52:44
просто есть функция, которая бы
00:52:47
выполнить, потому что в реальном мире
00:52:50
приложение, это обычно то, что мы
00:52:52
сделал бы для начала, чтобы мы могли иметь
00:52:54
функция под названием «Изменить тему», которую мы
00:52:56
будет звонить всякий раз, когда кнопка
00:52:58
нажал, так что давай сделаем это, нам просто нужно
00:53:01
добавим метод в наше приложение и мы
00:53:04
сделайте это, используя другой вариант, это
00:53:07
называются методами и внутри методов
00:53:11
объекты — это все методы, которые мы
00:53:13
хотим определить, поэтому в данном случае мы будем
00:53:15
есть метод изменения темы, давайте начнем
00:53:18
создав локальную переменную, мы будем
00:53:21
инициализируйте его как свет, а затем мы
00:53:24
проверьте текущую стоимость нашей темы
00:53:27
собственность, если это так, то мы собираемся
00:53:29
чтобы установить для этой переменной темы темный цвет
00:53:32
в противном случае текущее значение темы равно
00:53:36
темно, а у нас уже назначен свет
00:53:39
к темам, чтобы последняя строка этого
00:53:42
метод просто собирается определить наш
00:53:45
свойство темы — значение темы
00:53:48
переменная, поэтому давайте перейдем в браузер
00:53:50
давайте обновим страницу, давайте нажмем
00:53:53
переключаем и видим, что у нас то же самое
00:53:55
функциональность и, конечно, мы можем
00:53:57
измените значение темы с темной на
00:54:01
свет, чтобы панель навигации загорелась
00:54:03
как свет, а затем всякий раз, когда мы нажимаем на
00:54:06
переключить его, сделать его темным, так что один
00:54:09
вещь, которую ты не найдешь
00:54:10
обязательно с видом, но просто любой
00:54:12
рамки вообще, потому что все эти
00:54:14
Фреймворки основаны на JavaScript и
00:54:16
когда дело доходит до JavaScript, вы можете
00:54:18
сделать одно и то же в различных вариантах
00:54:20
разными способами, как здесь у нас есть
00:54:23
добавлена ​​возможность переключать наши
00:54:26
Тема навигационных панелей тремя разными способами
00:54:29
мы использовали вычисленные свойства, которые мы
00:54:32
теперь используем массивы и методы, а затем мы
00:54:36
был подход, которого не было
00:54:38
что-то у нас просто было несколько сложное
00:54:41
выражение внутри нашего шаблона и так
00:54:43
точно так же, как JavaScript, где у нас есть
00:54:45
несколько разных способов, которые мы можем сделать
00:54:47
то же самое только потому, что мы
00:54:49
иметь разные способы не обязательно
00:54:51
означает, что один способ лучше другого
00:54:53
все сводится к
00:54:56
ситуацию и что имеет смысл
00:55:00
ты наше приложение очень простое, но оно
00:55:03
также становимся немного непослушными, потому что мы
00:55:06
иметь весь этот код просто как бы
00:55:08
собраны вместе, и если бы мы нашли время
00:55:10
чтобы изучить это приложение, мы бы
00:55:12
по сути, находим две разные части, которые мы
00:55:15
была бы панель навигации, и тогда мы бы
00:55:18
есть контент, и если ты запомнишь
00:55:20
всякий раз, когда мы начинали это путешествие, мы видели
00:55:22
мы по сути разделили этих двоих
00:55:25
у нас было два приложения для просмотра одно
00:55:28
для панели навигации и один для контента
00:55:31
на самом деле это действительно не имеет смысла
00:55:33
иметь два отдельных приложения
00:55:35
потому что они каким-то образом связаны
00:55:39
они используют те же данные, по крайней мере, что и
00:55:42
насколько активная страница и страницы сейчас
00:55:46
однако тема и элементы темы изменения
00:55:50
специфичны для навигационной панели, поэтому она по-прежнему
00:55:53
имеет смысл разделить эти два понятия
00:55:56
кусочки, но мы не хотим создавать
00:55:58
вместо этого мы будем использовать различные приложения
00:56:01
используйте так называемые компоненты, и вы
00:56:04
можно думать о компоненте вроде
00:56:06
небольшое мини-приложение внутри
00:56:09
более крупное приложение заключается в том, что мы можем
00:56:11
упростить написание наших приложений
00:56:14
и поддерживать, но это также и для того, чтобы мы
00:56:17
может извлечь функциональность в меньший
00:56:21
деталь, специально предназначенная для этого
00:56:23
функциональность, такая как, например, навигация
00:56:25
bar может быть отдельным компонентом и
00:56:29
будет нести ответственность за любые действия
00:56:31
навигационная панель делает и только то, что навигационная панель
00:56:34
делает это в этом уроке, который мы собираемся сделать
00:56:37
создать компонент для отображения
00:56:39
Информация о странице, потому что это даст
00:56:41
нам возможность поговорить о многом
00:56:44
основ, чтобы в следующем
00:56:47
урок всякий раз, когда мы создаем компонент
00:56:49
что касается панели навигации, мы можем заняться еще чем-нибудь
00:56:53
сложные темы, поэтому мы хотим создать
00:56:57
компонент для нашего контента первый
00:56:59
нам нужно создать переменную
00:57:02
для нашего приложения, потому что нам нужно
00:57:04
ссылку на наше приложение, чтобы
00:57:07
создайте компонент, и нам нужно сделать
00:57:09
что прежде чем мы установим это, мы собираемся
00:57:12
разделить их на два утверждения, чтобы
00:57:14
что мы создадим наше приложение, а затем мы
00:57:16
Смонтируйте наше приложение, и прежде чем мы смонтируем
00:57:19
app, мы хотим создать наш компонент и
00:57:21
мы делаем это с помощью метода, называемого компонентом
00:57:23
первый аргумент, который мы передаем, — это
00:57:26
строковое имя для нашего компонента теперь здесь
00:57:28
некоторые соглашения, которые нам нужны
00:57:30
следуйте здесь, это должно быть строчными буквами и
00:57:33
если это простое слово, например страница
00:57:35
тогда мы просто называем это страницей, это тоже помогает
00:57:39
также не быть настоящим элементом HTML
00:57:42
но это то, что меня называли страницей
00:57:45
средство просмотра контента или страниц, поэтому, если у вас есть
00:57:48
несколько слов, тогда вам захочется
00:57:51
разделяйте их дефисом или тире
00:57:54
теперь второй аргумент, который мы передали
00:57:57
компонент является объектом параметров, поэтому все
00:58:01
идеи и концепции, о которых мы говорили
00:58:03
примерно на данный момент, такие как данные, вычисленные
00:58:06
методы свойств, все это
00:58:08
опции, все из которых можно использовать внутри
00:58:11
компонента и опции, которую мы
00:58:14
собираемся начать с называется
00:58:17
шаблон, потому что помните приложение
00:58:20
нужен шаблон и, как я уже упоминал,
00:58:22
компонент своего рода маленький мини
00:58:24
приложение внутри нашего более крупного
00:58:26
приложение, поэтому мы возьмем
00:58:29
разметка, которая у нас есть для отображения наших
00:58:31
контент, давай вынесем это из тела
00:58:33
и мы собираемся использовать это как
00:58:36
шаблона для этого компонента сейчас нет
00:58:38
обязательно нужен этот атрибут идентификатора, поэтому
00:58:41
давай избавимся от того, что нам не нужно
00:58:43
так какое-то время и так, как сейчас
00:58:45
если бы мы попытались использовать это, мы бы запустили
00:58:48
в ошибку, поскольку этот компонент
00:58:51
пытаюсь использовать страницы из нашего
00:58:54
приложение, и по умолчанию это не так
00:58:56
иметь доступ к этой информации, потому что
00:58:58
теперь он находится внутри своего собственного компонента, поэтому
00:59:01
а сейчас давайте избавимся от того, где мы
00:59:04
выводят эти данные, и давайте просто
00:59:06
иметь текст-заполнитель, чтобы мы
00:59:09
иметь заголовок страницы, а затем содержимое страницы
00:59:12
и затем мы будем использовать этот компонент
00:59:14
внутри нашего приложения, и мы делаем это
00:59:17
как обычный элемент HTML, за исключением того, что
00:59:21
это не HTML, это компонент представления
00:59:24
Итак, у нас есть открывающий и закрывающий тег
00:59:27
и всякий раз, когда мы заходим в браузер, давайте
00:59:29
обновите страницу и мы увидим страницу
00:59:32
заголовок и содержимое страницы, так что все работает
00:59:34
все в порядке, теперь нам нужно предоставить
00:59:38
информация для просмотра страниц, которую нужно сделать
00:59:40
это дело, за которое он несет ответственность
00:59:42
отображение заголовка и содержимого страницы так
00:59:46
нам нужно передавать данные вроде того, как мы
00:59:48
передавал бы данные в функцию, кроме
00:59:50
ввиду этого мы используем термин «реквизит», поэтому
00:59:54
компонент имеет реквизиты, в которые мы передаем данные
00:59:58
и мы можем передавать данные в двух разных
01:00:00
как будет выглядеть первое
01:00:03
просто обычные атрибуты HTML, за исключением того, что
01:00:06
они будут специфичными для этих
01:00:09
компоненты, поэтому мы можем сказать, что мы бы
01:00:11
есть реквизит, называемый заголовком страницы, который
01:00:14
это будет простая строка, поэтому мы
01:00:16
мог бы иметь такой заголовок страницы, а затем
01:00:19
мы также могли бы иметь содержимое страницы и однажды
01:00:22
еще раз обратите внимание, как я это печатаю
01:00:24
они выглядят как обычные атрибуты HTML, поэтому
01:00:28
что они все в нижнем регистре, если они
01:00:30
несколько слов, они разделены
01:00:32
дефисы и у меня будет содержимое страницы
01:00:36
вот и давай что-нибудь другое
01:00:37
так что всякий раз, когда мы просматриваем это в
01:00:39
браузер, там мы увидим разницу
01:00:41
Итак, у нас есть эти два реквизита, и это
01:00:43
отлично, но недостаточно просто поставить
01:00:46
ценности для них, мы должны их определить
01:00:49
внутри нашего компонента, так что это
01:00:51
еще один вариант, который мы укажем и
01:00:54
это просто называется реквизит и это
01:00:57
массив, содержащий имя
01:00:59
реквизит, за исключением того, что здесь мы собираемся
01:01:02
используйте верблюжий регистр, чтобы у нас был заголовок страницы и
01:01:06
Содержимое страницы, поэтому, когда дело доходит до нашего
01:01:09
разметку мы используем типичную
01:01:12
атрибуты разметки, но когда дело доходит до
01:01:15
Мы используем JavaScript, поэтому теперь мы
01:01:19
можно использовать заголовок и содержимое страницы
01:01:21
внутри нашего шаблона компонентов, поэтому
01:01:23
что у нас будет заголовок страницы, а затем
01:01:26
содержимое страницы и всякий раз, когда мы обновляем
01:01:29
странице мы увидим наш заголовок и
01:01:32
изменение контента на основе данных, которые
01:01:34
мы перешли к этому реквизиту, так что это
01:01:37
первый способ мы проходим просто
01:01:39
строковые значения, и важно
01:01:42
помните об этом различии, потому что мы можем
01:01:45
также используйте директиву связывания V с нашим
01:01:50
реквизит, и в этом случае мы привязываем некоторые
01:01:53
Выражение JavaScript тоже, но, как вы
01:01:56
знай, нам не обязательно говорить V-bind, мы можем
01:01:59
просто используйте сокращение, которое представляет собой двоеточие
01:02:01
поэтому в этом случае, если мы хотим использовать
01:02:04
строковое значение, которое нам нужно будет окружить
01:02:07
они с разделителями строк, которые в
01:02:10
в этом случае это просто одинарные кавычки
01:02:13
обновляем страницу и видим то же самое
01:02:15
результат, но мы хотим, чтобы здесь была динамика, поэтому
01:02:19
это мы отображаем заголовок и
01:02:22
контент для активной страницы, так что это
01:02:25
будет чем-то похоже на то, что
01:02:27
у нас было раньше, за исключением того, что теперь мы
01:02:29
передача этой информации как ограбление, так
01:02:33
всякий раз, когда мы заходим в браузер, мы
01:02:34
увидим ту же функциональность, что и
01:02:36
у нас была домашняя страница о и
01:02:39
контакт, это здорово, но я думаю
01:02:41
что мы можем сделать это немного
01:02:43
лучше, чтобы у нас был только один
01:02:45
prop, что мы можем позвонить Пейджу, а затем мы
01:02:48
будет проходить на страницах с индексом
01:02:51
активная страница, чтобы внутри нашей
01:02:54
компоненты, которые мы затем будем использовать на странице
01:02:57
свойства заголовка и содержимого, поэтому всякий раз, когда
01:03:00
мы используем программу просмотра страниц, это все, что мы
01:03:02
должны предоставить, а затем нам просто нужно
01:03:04
обновите наш компонент просмотра страниц, чтобы
01:03:07
у него есть реквизит страницы, и он собирается
01:03:11
отобразить заголовок страницы, а затем страницу
01:03:15
содержание, поэтому просто для проверки работоспособности перейдите на
01:03:18
обновил браузер все работает
01:03:20
точно так же, как это было раньше и так раньше
01:03:23
мы переходим к следующему уроку, давай просто
01:03:25
рассмотрим ключевые моменты создания
01:03:28
компоненты, потому что это важно для нас
01:03:31
приложений будет полно
01:03:33
компоненты, поэтому мы создаем компонент, который мы
01:03:36
дайте ему имя, и этот компонент сможет
01:03:39
есть варианты, один вариант — шаблон
01:03:42
другой вариант называется реквизит
01:03:46
по сути аргументы в пользу этого
01:03:48
компонент, чтобы мы могли передавать данные в
01:03:51
наши компоненты, чтобы они могли делать
01:03:53
все, что им нужно сделать в случае
01:03:55
этот просмотрщик страниц просто выводит
01:03:58
data, поэтому у нас есть реквизит под названием page, который мы
01:04:02
передать активную страницу в качестве реквизита страницы
01:04:06
используя V-связку, чтобы внутри
01:04:09
компоненты, которые мы можем использовать как объект
01:04:11
для вывода свойства заголовка страницы и
01:04:14
свойство контента и так далее
01:04:16
уроке мы создадим компонент для
01:04:19
нашу панель навигации на предыдущем уроке мы
01:04:22
извлек функциональность для
01:04:23
отображение информации о странице, которая
01:04:26
название и содержание сами по себе
01:04:29
компонент, называемый просмотрщиком страниц, у него есть
01:04:32
свойство, называемое страницей, которое мы передаем на странице
01:04:35
объект, чтобы он мог использовать
01:04:38
соответствующие свойства для отображения этого
01:04:39
информация, поэтому теперь мы по сути хотим
01:04:42
сделать то же самое для нашей навигации и так далее
01:04:45
давайте просто начнем с концепций
01:04:47
о котором мы говорили в предыдущем
01:04:49
урок, который я собираюсь начать с вырезания
01:04:51
разметка нашей навигационной панели, чтобы мы могли
01:04:54
продолжайте и определите этот компонент и
01:04:56
затем используйте эту разметку в качестве шаблона
01:04:59
давайте назовем это просто панелью навигации, а затем
01:05:02
шаблон будет использовать обратные кавычки
01:05:05
однако, чтобы разграничить эту строку
01:05:09
мы уже используем JavaScript
01:05:13
строки шаблона внутри этого шаблона
01:05:16
это значит, что нам нужно будет бежать
01:05:19
те, которые достаточно просто сделать, но
01:05:21
это боль, и это одна из
01:05:23
причины, почему, когда вы начинаете увлекаться
01:05:25
компоненты, это имеет большой смысл
01:05:28
чтобы начать использовать инструменты сборки и Tool
01:05:31
цепочки, потому что когда вы начинаете использовать jsx
01:05:35
тебе не нужно делать ничего подобного
01:05:38
но, к счастью, их не так много
01:05:40
побега, что нам нужно сделать здесь, так
01:05:43
вот наш шаблон, и поскольку мы
01:05:44
здесь мы можем пойти дальше и определить
01:05:46
реквизит, который понадобится этой навигационной панели
01:05:48
потому что ему нужны страницы, чтобы он
01:05:51
может генерировать элементы a для
01:05:54
ссылки, ему также нужна активная страница, поэтому
01:05:58
что он может правильно применять активный
01:06:01
CSS-класс, давайте определим эти реквизиты.
01:06:05
теперь технически мы можем назвать это
01:06:07
все, что мы хотим, потому что помни
01:06:09
этот реквизит очень похож на параметры
01:06:11
в функции это переменные, которые
01:06:14
мы будем использовать внутри нашего шаблона
01:06:16
пули, однако, если мы их назовем
01:06:19
что-то кроме страниц и активных
01:06:21
страница, то нам нужно будет сделать
01:06:23
необходимые изменения внутри нашего шаблона
01:06:25
и я не хочу этого делать, и вот мы
01:06:28
иди, у нас есть навигационная панель, по крайней мере,
01:06:31
начало нашей навигационной панели, так что давайте перейдем к
01:06:34
тело или на разметку нашего
01:06:37
приложение и давайте воспользуемся нашей навигационной панелью
01:06:40
и мы продолжим и переплетем страницы
01:06:44
в массив страниц приложений, а также
01:06:49
поскольку активная страница сейчас это очень
01:06:53
важно, потому что если мы не свяжем
01:06:57
активная страница, то мы столкнемся с
01:06:59
в первую очередь некоторые проблемы, если мы этого не сделаем
01:07:02
тогда мы передаем строку
01:07:05
буквальная активная страница, которая, конечно же,
01:07:07
вообще не получится, но давайте
01:07:11
просто представьте, что, не привязывая активный
01:07:15
страница, мы все еще используем это числовое
01:07:19
значение, которое инициализируется как ноль, поэтому
01:07:21
следует помнить одну вещь: потоки данных
01:07:24
от родителя к ребенку, так что в этом
01:07:28
конкретный случай, когда приложение является родительским
01:07:30
дочерний элемент - это компонент навигационной панели, поэтому
01:07:34
активная страница данных, которая инициализируется как
01:07:38
ноль передается в панель навигации, поэтому
01:07:42
в следующий раз, когда эта активная страница будет обновлена
01:07:44
это изменение не будет принято
01:07:48
вплоть до панели навигации, потому что она не привязана
01:07:51
поэтому, если активная страница станет единой, мы
01:07:55
по сути передал ему значение 0
01:07:58
и оно останется нулевым, так что если хотите
01:08:01
дочерние компоненты для обновления на основе
01:08:04
на основании данных, которые были предоставлены
01:08:07
тогда вам нужно привязать данные к этим
01:08:10
реквизит, поэтому мы хотим, чтобы активная страница была привязана к
01:08:14
на активной странице приложений теперь есть
01:08:17
еще пара вещей, которые нам нужны
01:08:19
сделать тему специфичной для панели навигации
01:08:22
так что мы можем убрать это из
01:08:24
приложение, и мы можем определить это как
01:08:27
часть данных для навигационной панели, которая
01:08:30
это похоже на опцию данных в
01:08:35
приложение, это функция, которая возвращает
01:08:37
объект, поэтому мы определим тему
01:08:41
то же самое верно и для наших методов, потому что
01:08:42
тема изменения действительно специфична только для
01:08:46
панель навигации, так что давай вырежем ее
01:08:47
полностью, и давайте добавим эти методы
01:08:51
опция для компонента, так что с этим
01:08:54
готово, давайте зайдем в браузер, давайте
01:08:55
обнови страницу, сейчас посмотрим
01:08:58
этот переключатель работает, это прекрасно
01:09:00
и я собираюсь сделать его темным, потому что это
01:09:02
так легче увидеть, что происходит
01:09:04
вот и я нажму на тему
01:09:06
ничего не происходит, я нажму
01:09:08
контакт, ничего не происходит собираюсь нажать
01:09:11
дома и конечно дома уже
01:09:13
загружается, но на самом деле ничего не происходит и
01:09:15
причина очень проста и это
01:09:17
потому что мы не обновляем активную страницу
01:09:21
теперь, если мы посмотрим на шаблон для
01:09:24
панель навигации всякий раз, когда мы нажимаем на одну из них
01:09:26
ссылки там активная страница равна
01:09:29
индекс и активные страницы предоставляются как
01:09:32
реквизит, но вот в чем суть реквизита
01:09:36
только для чтения, поэтому мы не можем изменить их значение
01:09:39
теперь внутри компонента, который делает
01:09:42
идеальный смысл, когда ты начинаешь думать
01:09:44
о том, как передаются данные, как я уже говорил
01:09:46
передается от родителя к дочернему элементу, поэтому, если бы мы были
01:09:50
изменить значение свойства внутри
01:09:53
ребенок, родитель не узнает об этом
01:09:56
значение изменилось, поскольку потоки данных
01:09:59
от родителя к ребенку, поэтому
01:10:02
вопрос в том, как нам сделать
01:10:04
наоборот, как ребенок может уведомить родителя
01:10:08
что что-то меняется ну это очень
01:10:11
просто мы используем событие или, скорее, мы используем
01:10:14
что такое такое событие, как
01:10:17
например, мы говорили о клике
01:10:18
событие до того места, где мы говорим по клику
01:10:21
и тогда у нас есть код, который будет
01:10:23
хорошо выполнить в данном конкретном случае
01:10:25
щелчок - это, по сути, опора, это
01:10:28
специальный реквизит, потому что это событие, но
01:10:31
по сути мы можем сделать то же самое, так что
01:10:33
что у нас есть реквизит, который будет выполняться
01:10:36
и мы можем назвать это просто навигационной ссылкой
01:10:41
щелкните, чтобы у нас была функция
01:10:43
который примет индекс, чтобы мы
01:10:47
сейчас бы изменил активную страницу
01:10:49
помните, что поскольку это панель навигации
01:10:52
компоненты, которые мы сейчас находимся внутри приложения
01:10:55
мы не внутри навигационной панели, так что это
01:10:58
код здесь специфичен для
01:11:01
приложение, но все, что нам нужно сделать, это установить
01:11:03
активная страница равна индексу, и мы
01:11:07
нужно сделать активным верхний регистр p
01:11:10
страница, так что она находится внутри наших компонентов
01:11:13
все, что нам нужно сделать, это изменить место, где мы
01:11:15
нажмите на элемент, который нам нужен
01:11:18
прежде всего нам нужно сделать две вещи
01:11:20
скажем, что теперь у нас есть реквизит под названием nav
01:11:22
щелкните ссылку и что это функция
01:11:25
это будет выполнено, и мы будем
01:11:29
передать индекс, чтобы он работал очень похоже
01:11:33
событие, поэтому родитель предоставляет
01:11:36
функция для навигации по ссылке нажмите, что
01:11:39
ребенок собирается выполнить это собирается
01:11:42
передать индекс обратно, чтобы он оказался внутри
01:11:45
приложение, которое мы можем обновить, активно
01:11:48
страницу к этому значению индекса, поэтому с этим
01:11:51
готово, мы можем вернуться в браузер, который мы
01:11:52
можно обновить, давайте переключим это на черный
01:11:54
чтобы мы могли видеть и собираемся
01:11:56
увидеть, что это работает именно так, как должно
01:11:59
поэтому дом, конечно, является значением по умолчанию, которое мы видим
01:12:03
что мы также видим, что дом активен
01:12:05
всякий раз, когда мы нажимаем о доме, нет
01:12:07
дольше активен о активен тогда о
01:12:11
конечно, мы видим контент примерно
01:12:13
всякий раз, когда мы нажимаем на контакт, я имею в виду, что
01:12:16
ненавижу делать здесь пьесу за пьесой, но это
01:12:18
это именно та функциональность, которую мы хотели бы
01:12:21
ожидаем, но теперь у нас есть
01:12:24
приложение разбито на два разных
01:12:27
компоненты, отвечающие за
01:12:29
свои собственные функции просмотра страниц
01:12:32
отвечает за отображение Страницы
01:12:35
информация, за которую отвечает панель навигации
01:12:38
для создания навигационной панели для отслеживания
01:12:41
темы, а также уведомить
01:12:45
приложение, когда пользователь нажимает на
01:12:47
ссылка и так на следующем уроке мы
01:12:49
собираюсь начать смотреть на вид
01:12:52
CLI, который представляет собой цепочку инструментов, которая делает
01:12:55
проще создавать приложения просмотра и
01:12:59
просмотреть компоненты
01:13:00
с начала этого курса мы
01:13:02
использовал Nothing But The View Library, чтобы пойти
01:13:05
над основами, и я хотел сделать
01:13:07
это потому, что я хочу, чтобы ты знал, что ты
01:13:10
может создавать приложения просмотра, используя только
01:13:13
в библиотеке вам не нужны цепочки инструментов
01:13:15
вам не нужны инструменты сборки, которые вам не нужны
01:13:17
нужно что-нибудь, кроме библиотеки просмотра
01:13:20
текстовый редактор и конечно браузер
01:13:22
однако у нас есть цепочки инструментов и мы создаем
01:13:25
инструменты именно потому, что они делают наши
01:13:28
жить разработчикам проще и пока
01:13:30
они чрезвычайно полезны для строительства
01:13:33
большие приложения, вы можете использовать эти
01:13:36
цепочки инструментов для сборки любого размера
01:13:38
приложение, которое я всегда беру за сборку
01:13:41
инструменты только потому, что они делают нашу жизнь
01:13:44
проще, поэтому мы собираемся сделать
01:13:46
установите то, что называется View CLI CLI
01:13:49
означает интерфейс командной строки, и это
01:13:51
дает нам все необходимые инструменты для
01:13:54
создавая наши приложения просмотра, но мы
01:13:57
также можно использовать такие функции, как jsx, которые
01:14:00
это Javascript и XML, а также новее
01:14:03
функции JavaScript, поэтому вещи, которые
01:14:05
не поддерживаются браузером изначально
01:14:07
на самом деле не имеет значения, потому что сборка
01:14:09
инструменты справятся с этим за нас
01:14:12
и перевести это в то, что
01:14:14
браузер понимает, но для того, чтобы
01:14:16
установите интерфейс командной строки представления, который вам нужен node.js
01:14:19
и если у тебя этого нет, то сейчас самое время
01:14:22
идеальное время, чтобы сделать это, потому что сейчас
01:14:24
не используется только для просмотра, не используется
01:14:27
просто ради реакции или типа того, вот как
01:14:30
мы управляем нашим узлом зависимостей и многим другим
01:14:33
в частности, менеджер пакетов узлов
01:14:35
просто часть современной веб-разработки, так что
01:14:38
если у тебя его нет, то сейчас самое время
01:14:40
получите его, просто зайдите на nodejs.org и
01:14:43
скачать версию LTS версию
01:14:46
число не обязательно ничего значит
01:14:48
с нашей точки зрения сейчас, если бы мы были
01:14:51
собираюсь создавать приложения Node, да
01:14:54
номер версии имеет значение, но это
01:14:56
не тот случай, просто поищи LTS, вот это
01:14:59
долгосрочная поддержка и режим загрузки и
01:15:01
установить его, это просто
01:15:03
при установке просто возьмите настройки по умолчанию и
01:15:05
как только это будет сделано, ты захочешь пойти
01:15:07
командную строку, потому что npm — это
01:15:10
инструмент командной строки, и мы хотим установить
01:15:13
CLI представления, чтобы он был на виду, затем косая черта
01:15:18
CLI, и мы хотим установить это глобально
01:15:21
теперь причина, по которой мы хотим установить
01:15:23
это глобально, чтобы мы могли использовать
01:15:26
просмотреть команду независимо от того, что
01:15:28
каталог, в котором мы находимся, и мы будем использовать
01:15:31
команда просмотра для создания нашего первого проекта
01:15:34
так что давайте назовем этот вид спа-салоном для начала
01:15:38
одностраничное приложение «Мы»
01:15:40
по сути собираюсь воссоздать страницу
01:15:42
что мы строили в прошлом
01:15:44
несколько уроков, но мы собираемся использовать
01:15:47
просмотрите CLI, и это даст нам
01:15:49
несколько вариантов, которые нам нужно будет пройти
01:15:51
сейчас у меня уже есть несколько пресетов
01:15:54
сделано, потому что, как я уже сказал, я использую view так
01:15:57
давайте перейдем к выбору вручную
01:15:59
функции и мы хотим выбрать Babel
01:16:03
потому что это компилятор, который позволяет
01:16:06
нам использовать новые функции JavaScript в
01:16:09
браузеры, которые его не поддерживают Babel
01:16:11
переведет это на JavaScript, который
01:16:13
браузер понимает, поэтому мы делаем
01:16:15
хотим Babel, и если бы мы хотели использовать
01:16:16
машинописный текст, мы могли бы сделать и это, мы
01:16:18
разве мы не собираемся использовать обычный
01:16:20
JavaScript, сейчас я собираюсь снять флажок
01:16:23
формат линтера слэша только потому, что
01:16:26
добавляет немного дополнительных вещей, и я
01:16:29
хочу, чтобы все было красиво, аккуратно и чисто
01:16:31
сейчас, конечно, в реальном проекте я бы
01:16:34
наверное, проверь линтер только потому, что
01:16:36
это хороший инструмент, но он работает
01:16:39
также потребуется некоторое время на обработку, и поскольку
01:16:42
время имеет решающее значение, мы собираемся
01:16:44
оставь это в покое, тогда Бабель действительно станет
01:16:46
единственное, что я хочу использовать прямо сейчас
01:16:48
так что давайте нажмем Enter, чтобы продолжить, мы дошли до
01:16:51
выберите последнюю версию vue.js
01:16:53
это 3.x, а затем мы можем выбрать, как нам
01:16:57
хотим, чтобы наша конфигурация была выложена, не так ли?
01:17:00
хотите, чтобы они были в выделенных файлах конфигурации или
01:17:03
внутри package.json мы хотим
01:17:05
выделенная конфигурация, ну, я хочу выделенную
01:17:08
конфигурационные файлы, и мы можем сохранить их как
01:17:10
предустановлено, что нет, и поэтому это будет
01:17:13
построить наш проект и когда проект
01:17:15
готов, мы хотим записать компакт-диск в этот новый
01:17:19
папку, а затем мы запустим наш код
01:17:21
редактор, чтобы мы могли взглянуть на
01:17:24
проект, потому что это будет очень
01:17:26
отличается от одного HTML-файла, который
01:17:30
мы до сих пор работали с
01:17:32
первой будет эта общая папка
01:17:34
вот это хорошо, это общая папка
01:17:37
это то, что увидит конечный пользователь, если
01:17:40
они заходят в наше приложение, это тоже
01:17:43
место, куда мы можем поместить наши статические
01:17:45
файлы, такие как изображения и тому подобное
01:17:47
однако есть альтернативы этому
01:17:50
подход, который это то, что мы будем
01:17:51
поговорим об этом позже, сейчас ты
01:17:54
видите, что есть два файла, вот
01:17:55
любимый значок, а еще есть
01:17:57
index.html, и его не так уж и много
01:18:00
здесь, внутри HTML-файла, но сделайте
01:18:03
обратите внимание, что есть этот div с идентификатором
01:18:05
приложения здесь находится наше приложение
01:18:08
будет смонтировано, теперь мы можем изменить
01:18:10
это потому, что у нас есть полное и тотальное
01:18:12
контроль над нашим приложением, но это
01:18:16
соглашение, мы просто будем придерживаться этого
01:18:18
и обратите внимание, что есть еще это
01:18:21
комментарий, в котором говорится, что построенные файлы будут
01:18:23
автоматически вводится сейчас для
01:18:26
подавляющее большинство времени в этом курсе мы
01:18:28
будем использовать разработки
01:18:31
режим, который по сути будет строить
01:18:33
наше приложение по мере его разработки и любые
01:18:36
изменение, которое мы вносим, ​​приведет к
01:18:38
автоматически отражаться внутри
01:18:40
браузер, поэтому те файлы, которые находятся
01:18:42
будут построены за кулисами
01:18:45
введено здесь, чтобы нам не пришлось беспокоиться
01:18:48
обо всем этом это только что сделано
01:18:50
автоматически для нас, так что это
01:18:52
общая папка, но есть еще
01:18:53
исходная папка, и это папка
01:18:55
что наш исходный код живет записью
01:18:59
точка нашего приложения — это main.js
01:19:03
вы увидите, что приложение создания
01:19:06
метод импортируется в этот файл
01:19:09
из библиотеки просмотра это также
01:19:12
импорт этой штуки из файла
01:19:15
называется app.view. Это компонент.
01:19:18
который мы рассмотрим здесь через минуту
01:19:20
но обратите внимание, что приложение
01:19:22
компонент приложения создается
01:19:26
используется как приложение и находится в стадии разработки
01:19:29
смонтирован в элементе с идентификатором
01:19:33
приложение, так что давайте посмотрим на это
01:19:35
app.view и это будет выглядеть очень
01:19:38
отличается от того, к чему мы привыкли
01:19:40
однако после того, как я объясню эти вещи
01:19:42
тогда ты узнаешь, о, ладно
01:19:45
вот что это такое, и вот у нас есть
01:19:48
шаблон, если мы посмотрим на файл
01:19:51
что мы работали с index.html
01:19:54
ты знаешь, я имел в виду разметку
01:19:56
это было внутри нашего приложения как
01:19:58
шаблон, это именно то, что мы
01:20:01
есть здесь, в этом новом приложении, так что
01:20:04
этот шаблон — разметка, которую вы увидите
01:20:07
что есть элемент изображения, который
01:20:09
используется, вы также увидите, что есть
01:20:11
этот привет, мир, который не является HTML
01:20:14
элемент, однако он импортируется
01:20:17
из другого файла, который имеет представление
01:20:19
расширение, это еще один компонент и
01:20:22
затем есть еще несколько вещей, таких как
01:20:24
объект, который экспортируется и
01:20:28
тогда здесь есть CSS, не волнуйся
01:20:31
обо всем этом мы собираемся поговорить
01:20:33
все эти вещи, но если мы возьмем
01:20:35
посмотри на привет, мир, в который мы собираемся
01:20:36
увидеть что-то, что выглядит намного больше
01:20:38
знакомо, поэтому, если мы посмотрим на шаблоны
01:20:41
мы видим больше элементов HTML, чем что-либо еще
01:20:44
иначе, и если мы прокрутим вниз, мы
01:20:47
собираюсь увидеть JavaScript для этого
01:20:51
компонент, у него есть объект, который имеет
01:20:54
вариант реквизита и, конечно же,
01:20:56
еще немного CSS, вот этот объект
01:20:59
мы видим, что это экспортируется
01:21:01
это объект опций, который мы использовали
01:21:04
используя все, о чем мы говорили
01:21:06
все основы по-прежнему
01:21:07
здесь просто немного по-другому
01:21:09
местах и ​​потому что они находятся в разных
01:21:12
местах, это делает его намного проще
01:21:14
разрабатывать и поддерживать эти приложения
01:21:16
поэтому на следующем уроке мы собираемся
01:21:19
начнём переводить наш существующий сингл
01:21:22
страничное приложение, которое использует только The
01:21:24
Просмотр библиотеки в другом приложении
01:21:27
который использует цепочку инструментов и инструменты сборки
01:21:31
когда я создаю новый проект первым
01:21:33
что мне нравится делать, так это удалять, ну нет
01:21:36
обязательно удалите все, но
01:21:38
почти все внутри
01:21:40
исходная папка, потому что мне нравится начинать
01:21:42
с нуля, таким образом я знаю, что мой
01:21:44
приложения имеют только то, что
01:21:46
им нужно и плюс это хорошая практика
01:21:49
потому что программирование — это навык и просто
01:21:52
как и любой навык, его полезно практиковать, поэтому
01:21:54
Я собираюсь удалить
01:21:57
main.js.view я тоже собираюсь удалить
01:21:59
привет мир внутри компонентов
01:22:02
папку, а также файл logo.png внутри
01:22:06
Активы Теперь кое-что об источнике.
01:22:09
папка - это то, что внутри нее
01:22:10
по существу произволен, поэтому это
01:22:13
папка компонентов, на самом деле это не так
01:22:15
дело в том, что мы можем называть это как захотим
01:22:16
нам даже не обязательно это иметь, если мы
01:22:18
не хочу, поэтому мы можем удалить
01:22:20
все внутри исходной папки
01:22:22
единственное, что мы абсолютно
01:22:24
безусловно, нужен файл с именем
01:22:27
main.js, потому что это точка входа
01:22:31
нашего приложения теперь мы можем изменить
01:22:33
название этого, но нам также придется изменить
01:22:35
конфигурация нашего проекта и
01:22:38
на самом деле нет причин делать это
01:22:40
большинство проектов, поэтому мы просто собираемся
01:22:42
оставьте его как main.js и первым делом
01:22:45
мы собираемся импортировать и создать приложение
01:22:48
с поля зрения, так что это даст нам
01:22:50
прямой доступ к функции создания приложения
01:22:53
поэтому нам не нужно говорить «просмотреть точку создать»
01:22:55
приложение или что-то в этом роде, мы просто звоним
01:22:58
создать приложение, и это похоже на
01:23:00
метод создания приложения, который мы использовали
01:23:03
прежде чем мы передадим объект, который
01:23:05
содержит опции для нашего приложения
01:23:08
а затем мы хотим смонтировать его куда угодно
01:23:11
элемент, которому я верю, тот, который мы хотим
01:23:14
есть идентификатор приложения, теперь одно, если хочешь
01:23:17
помните из первой версии этого
01:23:20
приложение, нам пришлось создать приложение
01:23:23
объект, чтобы мы могли создать наш
01:23:25
компоненты с использованием метода компонента
01:23:27
и затем мы могли бы смонтировать приложение на
01:23:30
элемент, нам не нужно это делать, используя
01:23:33
цепочку инструментов, потому что, когда мы создаем нашу
01:23:35
компоненты, которые мы можем определить
01:23:38
компоненты, которые мы там используем, которые
01:23:40
вы увидите всякий раз, когда мы создадим наше приложение
01:23:43
компонент компонент приложения для нашего
01:23:45
приложение по сути будет
01:23:48
объект параметров, который мы передали
01:23:51
всякий раз, когда мы вызывали создание приложения, но это
01:23:53
более того, потому что помните, что мы
01:23:55
также есть шаблон и шаблон
01:23:57
для нашего приложения есть панель навигации и
01:24:00
средство просмотра возраста страницы, так что я одна вещь
01:24:02
собираюсь сделать, это просто пойти и схватить
01:24:04
этот объект всякий раз, когда мы создаем это
01:24:06
приложение, потому что оно нам понадобится
01:24:10
давайте создадим новый файл и назовем его
01:24:13
app.view, это наше соглашение
01:24:16
компонент, который служит контейнером
01:24:18
для нашего приложения мы обычно вызываем
01:24:21
это app.view и нам нужен шаблон
01:24:23
а сейчас давайте просто выпьем немного
01:24:26
простой текст, и тогда у нас будет наш
01:24:29
JavaScript теперь код Visual Studio
01:24:31
автоматически вставил это в этот файл
01:24:34
и я не хочу этого, вместо этого мы хотим
01:24:37
экспортируйте объект по умолчанию, содержащий
01:24:40
параметры, которые нужны нашему приложению
01:24:43
это данные, в которых у нас есть
01:24:46
объект, имеющий свойство активной страницы
01:24:49
а также наши страницы, которые сейчас мы собираемся
01:24:52
добавьте сюда еще немного, но давайте сначала
01:24:55
все импортируют этот компонент приложения внутрь
01:24:57
app.js, и мы собираемся запустить его просто
01:25:01
чтобы посмотреть, все ли будет работать
01:25:02
прямо сейчас, поэтому мы хотим импортировать приложение из
01:25:06
app.view, и мы собираемся использовать это приложение
01:25:09
что является объектом, потому что это то, что
01:25:12
мы экспортировали из этого файла, мы
01:25:14
экспортируем этот объект сюда, и мы
01:25:16
собираюсь использовать это как объект параметров
01:25:19
для нашего приложения, так что теперь давайте перейдем к
01:25:21
командную строку, и мы хотим использовать
01:25:23
просмотрите команду, и мы последуем за этим
01:25:26
просто послужи, это сослужит службу
01:25:29
наше приложение для целей разработки
01:25:31
так что это займет наш код, это
01:25:33
собираюсь превратить это в беговой процесс
01:25:35
приложение, которое мы сможем просмотреть
01:25:37
в браузере и он будет смотреть
01:25:39
для изменений в наших файлах и каждый раз
01:25:42
что мы вносим изменения в наши файлы, это
01:25:44
будем автоматически обновлять наши
01:25:46
приложение, работающее в
01:25:48
браузер, и он сообщает нам, где он находится
01:25:49
запущен локальный хост 8080. Итак, давайте откроем
01:25:52
это в браузере и мы увидим
01:25:55
просто какой-то простой текст, который мы
01:25:58
ожидал увидеть, потому что это все
01:25:59
что у нас есть прямо сейчас, так что давай вернемся
01:26:01
в наше приложение, и мы хотим создать
01:26:05
наша панель навигации и программа просмотра страниц
01:26:08
компоненты, и я собираюсь создать их
01:26:10
внутри папки компонентов один раз
01:26:12
снова папка компонентов
01:26:14
совершенно произвольно, нет ничего
01:26:15
особенно в этом, мы могли бы переименовать его, мы
01:26:17
можем удалить его, и мы сможем организовать нашу
01:26:19
проект, как бы мы ни хотели, но это помогает
01:26:21
иметь какую-то организацию и
01:26:23
Я назову этот первый файл
01:26:25
navbar.view, то мы собираемся создать
01:26:27
другой файл, который мы назовем
01:26:30
просмотрщик страниц Dot View и так же, как
01:26:33
компонент приложения, нам также нужен шаблон, который нам также нужен
01:26:36
нужен элемент сценария и начнем
01:26:39
с помощью нашего средства просмотра страниц, потому что это
01:26:42
более простой вариант, и мы собираемся перейти к
01:26:45
наше старое приложение, которое мы собираемся
01:26:48
скопируйте объект параметров, который у нас есть для
01:26:51
и мы собираемся вставить это внутрь
01:26:54
скрипт или JavaScript теперь наш
01:26:57
шаблон, который мы можем оставить здесь, если захотим
01:26:59
однако на самом деле нет причин это делать
01:27:01
это потому, что мы действительно можем определить наши
01:27:03
шаблон внутри элемента шаблона
01:27:05
так что давай просто вырежем это и вставим это
01:27:08
внутри шаблона и теперь это так
01:27:11
гораздо легче работать, хотя с
01:27:13
этот конкретный компонент шаблон
01:27:15
было просто начать с навигационной панели
01:27:18
тот, где нам пришлось сбежать
01:27:20
но прежде чем мы перейдем к панели навигации, давайте
01:27:21
зайдите в наш app.view, прежде чем экспортировать наши
01:27:25
объект options, который мы хотим импортировать
01:27:29
компонент просмотра страниц, который взят из нашего
01:27:32
папка компонентов, файл называется
01:27:35
просмотрщик страниц Dot View и мы хотим рассказать
01:27:38
этот компонент приложения, который мы хотим использовать
01:27:41
наш просмотрщик страниц, и мы делаем это с помощью
01:27:44
Опция компонентов: это объект, который
01:27:47
содержит компоненты, которые мы используем
01:27:49
внутри этого компонента, поэтому у нас есть страница
01:27:53
просмотрщик, мы можем использовать его в нашем шаблоне
01:27:55
но, конечно, сам по себе просмотрщик страниц
01:27:58
это бесполезно, нам еще нужна навигация
01:28:01
бар, так что давайте продолжим и вернемся к нашему
01:28:04
индексный HTML, возьмем все варианты
01:28:07
объект, который мы использовали для панели навигации
01:28:10
компонент, и мы собираемся вставить его
01:28:12
в JavaScript, чтобы мы были
01:28:15
экспортируем этот объект, но мы снова
01:28:17
у нас есть шаблон, который мы хотим вырезать
01:28:19
из этого объекта параметров мы вставим
01:28:22
шаблон внутри шаблона
01:28:24
элемент, но нам нужно сделать некоторые
01:28:26
изменения для одного, от которого нам нужно избавиться
01:28:28
все сбежавшие персонажи, которые
01:28:31
к счастью, их было не так много, но
01:28:34
нам нужно обязательно удалить
01:28:36
правильные, и тогда у нас тоже есть это
01:28:39
внутри заголовка здесь, поэтому мы будем
01:28:41
удали их, все остальное должно работать
01:28:44
давайте удалим шаблоны здесь и так
01:28:47
затем мы хотим импортировать панель навигации
01:28:49
внутри app.v, давайте просто скопируем и
01:28:53
вставьте этот код туда, куда мы импортируем
01:28:55
навбар из компонентов navbar.view мы
01:28:59
используют панель навигации внутри app.view, поэтому
01:29:02
нам нужно добавить это к нашим компонентам
01:29:05
и тогда нам просто нужно использовать
01:29:07
шаблон из index.html, так что давайте возьмем
01:29:11
панель навигации и просмотр страницы, давайте вставим их
01:29:14
внутри шаблона нашего приложения и
01:29:16
посмотрим, сработает ли это, вернемся к
01:29:18
в браузере мы увидим, что наш стиль
01:29:21
работает не очень хорошо, так что это одно
01:29:23
что нам нужно, давайте перейдем к index.html
01:29:26
давайте возьмем этот элемент ссылки, который
01:29:29
ссылается на загрузочный CSS, и мы
01:29:32
собираюсь поместить это в наш индекс
01:29:35
HTML теперь, поскольку мы используем npm, мы можем
01:29:39
на самом деле установите загрузчик как
01:29:41
зависимость для нашего проекта, а затем мы
01:29:43
можете импортировать это в наше приложение
01:29:45
это то, что мы рассмотрим
01:29:47
но сейчас мы просто собираемся
01:29:49
иди по этому маршруту, чтобы всякий раз, когда мы вернемся
01:29:52
в браузере все наши стили
01:29:54
вот и настал момент истины
01:29:56
всякий раз, когда мы нажимаем кнопку переключения
01:29:58
мы видим, что стиль навигационной панели
01:30:02
переключается, если мы нажимаем на одну из ссылок
01:30:05
для информации или контакта мы видим это
01:30:08
это действительно работает так же, как и раньше
01:30:10
теперь также обратите внимание, что значок просмотра для
01:30:13
инструменты разработчика горят, что означает
01:30:16
что он распознает, что представление работает
01:30:19
в этом приложении, и мы должны иметь
01:30:22
доступ к инструментам разработчика, так что я
01:30:24
собираюсь их подтянуть, это не получится
01:30:25
покажем, ну, это покажет
01:30:27
по умолчанию иногда приходится нажимать
01:30:29
знак плюс для дополнительных инструментов, а затем
01:30:31
выберите вид, но вот он, и мы можем
01:30:34
взгляните на наше приложение в
01:30:37
инструменты разработчика, чтобы вы могли видеть, что мы
01:30:39
начните с приложения, которое является контейнером для
01:30:42
наше приложение, затем мы видим панель навигации
01:30:45
компонент, который используется, а также
01:30:47
средство просмотра страниц и всякий раз, когда мы выбираем
01:30:50
одно из них я выберу приложение
01:30:52
с правой стороны вы можете видеть
01:30:54
что у нас есть параметры данных, поэтому у нас есть
01:30:57
активную страницу, а затем мы видим
01:30:59
массив страниц, теперь все в порядке, если мы нажмем на одну
01:31:03
из этих ссылок давайте просто перейдем к контакту
01:31:05
вы увидите эту активную страницу
01:31:07
автоматически обновляется, поэтому любые изменения, которые
01:31:09
мы делаем через наше приложение
01:31:11
автоматически появляться в данных
01:31:14
и состояние нашего приложения мы можем
01:31:17
также отредактируйте это значение, чтобы прямо сейчас
01:31:20
Страница «О программе» активна, если мы изменим это
01:31:22
до нуля, а затем отправьте это изменение, которое мы
01:31:26
вижу, что наше приложение обновляется
01:31:28
соответственно и причина очень
01:31:30
просто, потому что view следит за
01:31:32
изменения не только на активной странице, но и
01:31:36
в массив страниц, поэтому, если они есть
01:31:37
изменить эти значения или объекты, это
01:31:40
собираюсь автоматически обновить Дом
01:31:43
и это дает нам возможность легко
01:31:46
отладка, если мы столкнемся с какими-либо проблемами, если
01:31:49
компонент не обязательно выполняет рендеринг
01:31:51
правильно, по какой-то причине данные не
01:31:53
правильно стекая вниз, мы можем использовать
01:31:56
инструменты разработчика для устранения этих проблем
01:31:58
делает нашу жизнь намного проще, поэтому мы
01:32:01
идите, мы воссоздали приложение
01:32:03
над которым мы работаем, используя
01:32:06
просмотреть цепочку инструментов, это требует некоторых
01:32:09
дополнительный код, однако теперь наше приложение
01:32:11
гораздо проще разрабатывать и
01:32:13
поддерживать, потому что все есть
01:32:15
теперь разделен на отдельные файлы
01:32:19
что мы используем цепочку инструментов для работы
01:32:21
с помощью и создадим наше приложение, которое нам нужно
01:32:23
говорить о стиле, потому что так
01:32:25
мы работаем с стилем импорта, изменится
01:32:28
хотя бы немного, насколько
01:32:30
к чему мы привыкли сейчас все что
01:32:32
мы говорили до сих пор о
01:32:34
применение классов CSS к элементам
01:32:37
все еще в силе, это не меняет того, что я
01:32:40
хочу обсудить в первую очередь то, как мы
01:32:42
добавить CSS из внешнего источника
01:32:45
как например в предыдущем уроке
01:32:47
Я добавил компакт-диск для начальной загрузки внутри
01:32:51
index.html, и пока мы можем это сделать
01:32:54
на самом деле то, что я хочу сделать, это взять это
01:32:57
нет, потому что я хочу установить загрузчик
01:33:00
в этом проекте, а затем импортируйте CSS
01:33:04
файл в приложение таким образом, так что
01:33:06
вот как это выглядит сейчас
01:33:07
без CSS из начальной загрузки, какой из
01:33:10
конечно, это то, чего мы ожидаем и
01:33:12
тогда я хочу перейти в командную строку
01:33:13
и мы установим загрузчик и мы
01:33:17
собираюсь сохранить это как зависимость
01:33:19
и причина, по которой мы хотим это сохранить
01:33:22
заключается в том, что всякий раз, когда нам нужно установить
01:33:25
все сначала, все, что нам нужно
01:33:28
сделать, это сказать npm install, а затем
01:33:30
все, включая бутстрап, есть
01:33:32
установлено, так что все готово, теперь давайте
01:33:35
вернемся к нашему коду, и я собираюсь
01:33:39
откройте файл main.js, потому что это
01:33:42
куда мы будем импортировать этот загрузочный CSS
01:33:46
если ты никогда не делал этого раньше, это
01:33:48
это будет выглядеть довольно странно, но что мы
01:33:50
хочу сделать, это импортировать из узла
01:33:53
подчеркните модуль сейчас, если это не так
01:33:55
вообще знаком с узлом, и это
01:33:58
твой первый опыт во всем этом
01:34:00
о нашем проекте установлен внутри
01:34:04
этот узел подчеркивает модули, как вы можете
01:34:06
видишь, здесь много всего, так что
01:34:09
все, что здесь есть, потому что наше
01:34:12
проект нуждается в этом либо из-за
01:34:14
просмотреть CLI или из-за начальной загрузки, поэтому мы
01:34:18
хочу уйти
01:34:19
модули подчеркивания узла на самом деле мы
01:34:22
очень редко когда-либо открываю его, это может быть
01:34:24
полезно, потому что есть исходный код в
01:34:26
там, что ты можешь прочитать, если тебе когда-нибудь понадобится
01:34:28
чтобы выяснить, как что-то работает
01:34:30
но для наших целей мы не хотим этого делать
01:34:33
все, что мы хотим импортировать из узла
01:34:36
модули слэш бутстрап слэш дист Форд
01:34:40
CSS-слэш для распространения
01:34:43
bootstrap.csn всякий раз, когда мы сохраняем это, тогда
01:34:46
инструменты сборки справятся с этим
01:34:48
в наше приложение, и оно будет
01:34:51
автоматически внедрить это в браузер
01:34:54
теперь есть несколько преимуществ
01:34:57
делаю это, потому что у нас есть эти сборки
01:34:59
инструменты, часть их работы заключается в оптимизации
01:35:03
файлы, которые создаются таким образом
01:35:07
весь этот процесс будет
01:35:09
оптимизировать файлы из
01:35:12
bootstrap.css, а также наш исходный код
01:35:15
файлы и все остальное, что мы импортируем
01:35:18
то есть запускается с помощью инструментов сборки
01:35:21
также будет оптимизировано, включая
01:35:23
изображения, поэтому иногда нам хочется немного
01:35:26
изображения проходят через инструменты сборки как
01:35:29
против помещения их внутрь
01:35:31
общая папка, это на потом прямо сейчас
01:35:33
теперь у нас есть начальная загрузка того, что я хочу сделать
01:35:36
сейчас прорыв в некоторых функциях
01:35:40
внутри нашей панели навигации конкретно я хочу
01:35:42
взять это за элемент, и я хочу
01:35:45
по сути превратить это во что-то вроде
01:35:47
это для того, чтобы у нас была ссылка на панель навигации и
01:35:52
мы предоставим ему по существу две вещи
01:35:55
у нас будет страница, которую мы хотим
01:35:58
покажи или хотя бы ссылку, а потом
01:36:01
у нас будет что-то под названием «активно»
01:36:04
и ценность этого будет
01:36:06
в зависимости от того, активен ли текущий
01:36:10
страница теперь равна текущему индексу
01:36:14
вы можете подумать, что это пустая трата времени
01:36:16
время, почему мы хотим это сделать, когда
01:36:18
по сути мы можем сделать это то же самое
01:36:19
вещь только с этим элементом, который
01:36:21
мы уже делали это раньше, их много
01:36:24
Причины и, наверное, самые важные
01:36:26
причина в том, что, нарушив это
01:36:28
функциональность отсутствует, теперь у нас есть
01:36:31
компонент, который будет строго
01:36:33
с целью отображения одного
01:36:37
ссылка, которая отвечает за отображение
01:36:39
ссылку, а также различные состояния
01:36:42
эта ссылка, активна она или нет
01:36:44
в этом есть некоторые преимущества
01:36:47
функциональность, извлеченная из его
01:36:49
собственный компонент, чтобы вы разрабатывали
01:36:51
ваши приложения вы можете найти, эй, я
01:36:54
могу извлечь это, даже если это
01:36:55
что-то настолько простое, как это, нет
01:36:57
вред от этого, потому что в конечном итоге это
01:37:01
упрощает разработку вашего приложения
01:37:03
и поддерживать, поэтому мы собираемся создать
01:37:05
этот компонент ссылки на навигационную панель у нас будет
01:37:09
шаблон, который по сути просто
01:37:11
будет этот элемент, однако мы
01:37:14
придется немного его почистить, потому что
01:37:16
у нас больше нет этой активной страницы, но
01:37:21
мы до этого доберемся, давайте добавим скрипт
01:37:24
и мы хотим экспортировать объект по умолчанию
01:37:28
давайте продолжим и определим реквизиты для
01:37:30
где у нас есть страница, и у нас есть это
01:37:33
активен, и тогда мы также собираемся
01:37:36
есть рассчитанный вариант, потому что мы
01:37:39
собираюсь создать вычисляемое свойство
01:37:42
называются активными занятиями, потому что на самом деле
01:37:45
я хочу применить несколько
01:37:47
классы всякий раз, когда ссылка активна
01:37:50
конечно, первым будет
01:37:53
активный класс, и теперь мы можем использовать is
01:37:57
активная опора для управления вторым
01:38:00
тот, который я хочу, называется «подчеркнуть» и
01:38:03
это также будет основано на
01:38:06
является активной опорой, чтобы мы могли использовать это
01:38:08
активные занятия прямо здесь, когда мы
01:38:11
привяжите наши классы CSS, которые нам теперь не нужны
01:38:14
с помощью этого прослушивателя событий кликов мы можем это сделать
01:38:17
здесь я имею в виду, что нет ничего, что говорит
01:38:20
что мы не можем сделать это здесь, однако, если мы
01:38:23
добавьте это в наш компонент ссылок на панели навигации
01:38:26
здесь мы увидим, что это
01:38:29
будет автоматически применено к
01:38:32
элемент, чтобы всякий раз, когда мы нажимаем на
01:38:33
этот элемент мы еще собираемся получить
01:38:35
та же функциональность, которую мы не делаем
01:38:38
нужно определить эту навигационную ссылку, щелкните оба
01:38:41
здесь и по ссылке на панели навигации, и это
01:38:45
просто одна из волшебных вещей
01:38:47
просмотреть это событие клика, которое будет
01:38:51
поместил на этот элемент, теперь это не так
01:38:53
буду работать так, как сейчас, потому что
01:38:55
внутри панели навигации нам нужно импортировать
01:38:59
этот компонент ссылки на панель навигации, это откуда
01:39:02
файл внутри того же каталога, поэтому
01:39:05
нам просто нужно сказать косую черту через точку
01:39:07
navbarlink.view, а затем нам нужно добавить
01:39:10
вариант компонентов к нашим вариантам
01:39:14
возражайте здесь, и мы, конечно, будем
01:39:16
ссылка на навигацию ячменя, так что с этим покончено
01:39:19
давай просто вернемся в браузер, давай
01:39:21
пройди проверку здравомыслия, убедись во всем
01:39:22
работает так же, как и до этого
01:39:26
это здорово, но теперь я хочу добавить это
01:39:28
подчеркните класс CSS, чтобы вернуться внутрь
01:39:32
Ссылка на панель навигации Я собираюсь добавить стиль
01:39:35
элемент, и внутри него у нас будет
01:39:37
которые подчеркивают, и мы собираемся установить
01:39:40
оформление текста, которое нужно подчеркнуть, но
01:39:44
давай сделаем важное, потому что я думаю
01:39:47
начальная загрузка собирается переопределить это так
01:39:50
давай зайдём в браузер там мы увидим
01:39:52
подчеркивание и всякий раз, когда мы нажимаем на
01:39:54
ссылки, конечно, мы видим подчеркиванием
01:39:56
перейдите по активной ссылке, это то, что мы
01:39:59
ожидал бы увидеть сейчас, мы могли бы подумать
01:40:01
это потому, что мы определили этот класс CSS
01:40:04
прямо здесь, внутри этого компонента
01:40:06
что область действия этого компонента ограничена
01:40:09
это не тот случай, если мы зайдем в программу просмотра страниц
01:40:12
это совершенно отдельный компонент
01:40:15
между этим нет никакой связи
01:40:18
и ссылку на панель навигации, по крайней мере, до
01:40:20
компоненты обеспокоены, мы можем перейти к
01:40:23
это элемент, и давайте добавим
01:40:26
подчеркните класс CSS, и мы собираемся
01:40:29
обратите внимание, что это также подчеркнуто, чтобы мы могли
01:40:32
Определите CSS внутри наших компонентов, но
01:40:36
по умолчанию они не ограничены областью действия, они есть
01:40:38
Глобальные, однако мы можем сделать их ограниченными.
01:40:41
к компоненту, который они определены
01:40:43
путем добавления атрибута области видимости в
01:40:48
элемент стиля, все, что мы можем сказать, это
01:40:50
область действия стиля, и теперь всякий раз, когда мы идем к
01:40:52
браузере мы увидим, что
01:40:54
подчеркивание по-прежнему доступно для
01:40:56
ссылки на панель навигации, но обратите внимание, что это нет
01:40:59
больше не доступно для нашего просмотра страниц и
01:41:02
это означает, что мы можем зайти внутрь страницы
01:41:04
зритель, если бы мы захотели и могли бы
01:41:07
Определите совершенно отдельный подчеркнутый
01:41:10
класс, но мы, вероятно, захотим сделать
01:41:12
это тоже ограничено, поэтому давайте добавим
01:41:15
подчеркни и давай просто сделаем этот цвет
01:41:19
синий что-то, что не является подчеркиванием
01:41:21
и там мы видим, что наш заголовок
01:41:24
синий, конечно, когда бы мы ни пошли посмотреть
01:41:26
на других страницах заголовок будет
01:41:28
синий тоже, поэтому, когда дело доходит до добавления
01:41:30
CSS для наших проектов у нас есть несколько
01:41:32
различные варианты, мы можем установить их как
01:41:35
зависимость для нашего проекта и импорта
01:41:37
их точно так же, как мы это делали с бутстрапом, мы
01:41:40
также можете определить CSS для наших компонентов
01:41:44
мы можем сделать их глобальными или можем сделать
01:41:47
они ограничены компонентом, который они
01:41:49
определяются как разработчики программного обеспечения
01:41:52
вся наша цель – построить
01:41:54
приложения, чтобы пользователи могли работать с
01:41:57
их данные и, как веб-разработчики, наши
01:42:00
ситуация немного уникальна, потому что мы
01:42:02
по сути, у нас есть два приложения
01:42:04
есть серверное приложение, которое
01:42:06
отвечает за обработку всех
01:42:09
данные и идентификационные данные, а затем у нас есть
01:42:11
клиентское приложение, которое загружается
01:42:14
в браузер это то, что пользователь
01:42:16
взаимодействует с тем, чтобы работать с
01:42:18
с их данными, чтобы вы могли сделать
01:42:20
аргумент, который, вероятно, наиболее
01:42:22
Важная вещь в нашем приложении
01:42:25
для загрузки данных, чтобы пользователь мог получить доступ
01:42:28
и работать с этими данными теперь
01:42:31
вопрос в том, как нам это сделать
01:42:33
потому что это не всегда просто ясно
01:42:36
например, если бы у нас была кнопка, которая
01:42:40
пользователь мог нажать на него, и это
01:42:42
получить данные, которые были целью этого
01:42:44
кнопка, с которой довольно ясно, когда мы
01:42:47
получит эту информацию из
01:42:49
сервер, однако как насчет данных, которые
01:42:51
нам нужно сначала загрузить, вот тогда
01:42:53
пользователь сначала запускает приложение
01:42:55
их данные уже готовы для них
01:42:58
потому что если мы посмотрим на наше приложение, мы
01:43:02
на самом деле у меня нет четкого представления о том, как
01:43:04
загрузить эту информацию, я имею в виду да, один из
01:43:06
мы могли бы добавить метод
01:43:09
что мы могли бы вызвать get Pages, чтобы
01:43:13
например, страницы представляют собой данные, которые мы бы
01:43:16
хочу динамически загружать, чтобы мы могли
01:43:18
есть асинхронный метод get
01:43:22
страницы, и это будет отвечать за
01:43:25
получение этой информации из
01:43:27
сервер, чтобы мы могли продолжить и написать
01:43:29
этот код туда, куда мы могли бы получить
01:43:32
Pages.json и, конечно же, в реальном
01:43:35
приложение, это ударит по некоторым
01:43:37
конечная точка серверного приложения, что
01:43:40
Я собираюсь сделать это удалить эту страницу
01:43:43
объекты и внутри общей папки
01:43:45
Я собираюсь создать новый файл с именем
01:43:48
pages.json, и я собираюсь вставить
01:43:52
Структура Json, которая имеет то же самое
01:43:54
информация просто отформатирована в Json, поэтому
01:43:57
это файл, который мы собираемся
01:43:59
fetch, нам, конечно, нужно это проанализировать
01:44:02
в объект JavaScript, чтобы мы могли использовать
01:44:06
метод Json объектов ответа и
01:44:09
тогда мы могли бы вернуть данные так, чтобы
01:44:13
внутри данных, которые мы на самом деле вызвали бы
01:44:16
метод get Pages, и это не вариант
01:44:19
но это очень плохой вариант, поэтому вместо этого
01:44:22
что мы можем сделать, так это воспользоваться
01:44:25
события жизненного цикла компонента, поэтому в
01:44:28
просмотреть документацию, есть такая жизнь
01:44:30
диаграмма цикла, которая может быть, а может и не быть
01:44:33
легко читается в зависимости от вашего
01:44:36
понимание терминологии и
01:44:39
просто твое понимание жизни
01:44:41
цикл компонента представления, но в основном
01:44:43
он начинается сверху, где находится рендерер
01:44:45
встречает компонент, так что это
01:44:48
просмотреть время выполнения, в котором обнаружен компонент
01:44:51
что его нужно загрузить в браузер
01:44:53
так вот это перед созданием события
01:44:56
это произойдет, и это
01:44:59
событие, к которому мы можем подключиться и выполнить
01:45:02
код, когда экземпляр компонента
01:45:05
инициализированы, реквизиты разрешены, но
01:45:08
нет никакой обработки, поскольку
01:45:10
данные компонента или вычисленные свойства
01:45:13
так что с точки зрения наших потребностей то, что было раньше
01:45:17
создание на самом деле не является чем-то, что
01:45:19
мы хотели бы использовать для загрузки данных
01:45:22
прежде всего потому, что мы хотим, чтобы данные
01:45:25
уже обработаны, а также
01:45:27
вычисленные значения, так что давайте вернемся
01:45:29
к диаграмме после, прежде чем создать, затем
01:45:32
есть инициализация
01:45:34
API опций — это тот API, которым мы являемся
01:45:37
используя здесь, вверху, вы можете увидеть
01:45:39
что есть эта установка, а затем это
01:45:41
API композиции API композиции — это
01:45:44
другой способ создания одного и того же
01:45:46
компоненты, с которыми мы работаем, и
01:45:48
мы рассмотрим API композиции для
01:45:50
сейчас мы работаем с API опций
01:45:52
поэтому после инициализации API параметров
01:45:55
затем есть это созданное событие, это
01:45:58
созданное событие происходит после того, как данные и
01:46:01
вычисленные свойства были
01:46:03
обрабатывается, но до того, как компонент будет
01:46:06
загружается в документ в браузере
01:46:09
так что это идеальное место, где мы
01:46:11
хотелось бы загрузить наш контент, потому что
01:46:13
это означает, что данные обрабатываются так
01:46:16
что всякий раз, когда мы загружаем наши данные, тогда
01:46:19
представление сможет реагировать на
01:46:21
это изменится, но это еще до того, как это произойдет
01:46:24
видно в браузере, что очень
01:46:26
полезно для конечного пользователя, поэтому мы
01:46:29
хочу использовать это созданное событие и все
01:46:32
нам нужно добавить созданный как метод
01:46:35
к нашему объекту параметров, так что это просто
01:46:39
другой вариант, как если бы мы захотели
01:46:42
используйте перед созданием, мы бы сделали то же самое
01:46:44
вещь, а затем внутри этого создана
01:46:47
метод, который мы сейчас назвали бы get Pages
01:46:51
мы могли бы назначить это страницам в нашем
01:46:56
такие данные или то, что я бы, вероятно,
01:46:58
сделать что-то вроде этого, так что это
01:47:00
внутри get Pages мы продолжим
01:47:02
и установите страницы, равные нашим данным, поэтому с помощью
01:47:06
это простое изменение мы можем перейти к
01:47:08
браузер и мы увидим
01:47:11
что-то, что выглядит немного странно, мы
01:47:14
у меня две панели навигации, поэтому давайте посмотрим на
01:47:17
консоль разработчика, потому что мы собираемся
01:47:19
чтобы столкнуться с ошибкой, здесь написано, что
01:47:21
он не может читать свойства неопределенного
01:47:23
он пытается прочитать заголовок страницы и это
01:47:26
сообщает нам, где находится точка просмотра страниц
01:47:29
Просмотр, поэтому давайте откроем средство просмотра страниц и
01:47:32
посмотрим, это прямо здесь, в третьей строке
01:47:34
он пытается получить доступ к заголовку этой страницы
01:47:37
собственность, но она не существует и
01:47:40
единственная причина, почему этого не существует
01:47:41
потому что этот объект страницы имеет значение null или
01:47:45
не определено и единственная причина, почему это
01:47:48
будет нулевым или неопределенным, потому что
01:47:50
страница, которая была передана как страница
01:47:53
prop имеет значение null или неопределенное, так что в основном
01:47:56
это страницы до того, как наши данные были
01:48:00
загруженные страницы представляют собой пустой массив, поэтому
01:48:03
неопределенное привязано к странице
01:48:06
опора для средства просмотра страниц, и мы
01:48:08
столкнулся с этой ошибкой, поэтому
01:48:10
вопрос в том, как нам решить эту проблему
01:48:13
и есть много разных
01:48:15
способы, которые мы собираемся посмотреть
01:48:17
на следующем уроке в предыдущем
01:48:20
урок, мы загрузили данные в наш
01:48:22
приложение, сделав HTTP-запрос
01:48:25
изнутри созданного хука, поэтому мы
01:48:28
получили эту информацию, мы ее проанализировали
01:48:30
в массив JavaScript, а затем мы
01:48:32
сохранил этот массив в данных страниц
01:48:36
собственность, однако всякий раз, когда мы просматриваем это
01:48:38
в браузере все еще вроде работает
01:48:40
но это выглядит очень странно, потому что мы
01:48:42
есть две навигационные панели, и если мы посмотрим на
01:48:44
консоль, у нас есть ошибка, и это
01:48:47
из-за этого прямо здесь, на странице
01:48:49
компонент просмотра получает значение
01:48:51
неопределенное прошлое для свойства страницы и
01:48:55
фактическая ошибка заключается в том, что он пытается использовать
01:48:58
свойство заголовка страницы в неопределенном
01:49:01
ну, конечно, undefined не имеет
01:49:03
любое правильное, так что это, конечно, будет
01:49:05
неудача и причина, по которой мы видим
01:49:08
это потому, что страницы инициализируются как
01:49:11
пустой массив и он не заполнен
01:49:13
пока компонент не будет инициализирован
01:49:17
данные обрабатываются тестом, а затем
01:49:19
созданный хук выполняется, вот это
01:49:23
крошечный краткий момент, когда страницы
01:49:26
пусто, и программа просмотра страниц пытается
01:49:29
получить элемент с индексом 0 из
01:49:33
пустой массив, что, конечно, и есть
01:49:35
невозможно, поэтому неопределенное передается в
01:49:38
программа просмотра страниц, так что есть пара
01:49:40
разные способы, которыми мы можем обойти
01:49:42
эта конкретная ошибка и, возможно,
01:49:44
самое простое - это что-то сделать
01:49:46
как мы бы поступили в обычном режиме
01:49:47
JavaScript, и это проверка того, можем ли мы
01:49:50
иметь какие-либо элементы внутри страниц
01:49:52
массив, мы можем сделать это с помощью директивы
01:49:54
называется, если это очень похоже на
01:49:57
if в JavaScript, и мы можем
01:50:00
используйте его для любого элемента, в котором нет необходимости
01:50:02
быть элементом HTML или компонентом, как
01:50:05
пока мы его используем и предоставляем
01:50:07
истинное или ложное значение, это сработает
01:50:10
все в порядке, поэтому мы хотим проверить,
01:50:13
длина страниц больше нуля
01:50:16
и это будет одно из двух
01:50:17
вещи, если значение директивы if
01:50:21
верно, тогда программа просмотра страниц будет
01:50:25
вывод в документ, если он ложный
01:50:28
тогда его не будет в
01:50:30
документ вообще, поэтому давайте посмотрим на
01:50:32
давайте обновим, чтобы загрузить
01:50:34
все с нуля заметьте, что мы
01:50:36
теперь у нас нет двух навигационных панелей и нет
01:50:39
есть какие-либо ошибки внутри консоли
01:50:41
и все работает так, как должно, если
01:50:44
мы рассмотрим элементы, которые мы можем
01:50:46
видишь, конечно, у нас есть панель навигации, мы
01:50:48
также есть элемент div, который содержит
01:50:50
информация о странице, но давайте сделаем это
01:50:52
давайте установим значение false для
01:50:56
просмотрщик страниц, вернемся к браузеру
01:50:58
и давайте обновим страницу, на которой мы все еще находимся
01:51:01
собираюсь увидеть нашу навигационную панель, потому что мы
01:51:03
только что не влияет на навигацию
01:51:05
все, однако мы не видим страницу
01:51:08
содержание, и если мы посмотрим на элементы
01:51:10
мы видим это V, если HTML-комментарии, где
01:51:15
этот элемент div будет таким, что div
01:51:17
элемента вообще нет в документе
01:51:20
полностью исчезло и останется исчезнувшим
01:51:22
до тех пор, пока значение этой директивы V if
01:51:26
верно, поэтому этот подход очень
01:51:29
как то, что мы делали бы в обычном
01:51:31
JavaScript, если длина страниц
01:51:33
больше нуля, затем отобразить страницу
01:51:37
если нет, то спрячь это, теперь есть
01:51:40
аналогичная директива под названием шоу и
01:51:43
его цель — показать или скрыть контент
01:51:45
но это делается по-другому
01:51:47
вместо этого он использует CSS для отображения и скрытия
01:51:51
элемент, поэтому, если мы используем V, покажем, что мы здесь
01:51:55
все равно столкнусь с проблемой, потому что
01:51:58
с точки зрения зрителя страницы
01:52:01
хотя это все еще есть в документе
01:52:04
он будет скрыт с помощью CSS, тогда как с
01:52:08
v если бы его вообще не было
01:52:10
сгенерировать ошибку, давайте посмотрим
01:52:12
на каком шоу V сделал бы это, давайте создадим
01:52:15
элемент div, нам не нужны классы
01:52:18
или что-то в этом роде, давай просто Ви
01:52:20
show и давайте установим для этого значения значение false, чтобы
01:52:23
мы, конечно, скроем этот контент
01:52:26
мы не увидим этого рендеринга
01:52:28
в браузере, однако всякий раз, когда мы
01:52:30
посмотрим на элементы, которые мы еще увидим
01:52:32
этот элемент есть, просто он
01:52:35
для дисплея установлено значение «Нет», поэтому вы можете
01:52:37
показывать и скрывать контент с помощью двух
01:52:40
директивы V show использует CSS, чтобы скрыть
01:52:44
содержание директивы V, если это не так
01:52:46
вообще выведите этот элемент, если он есть
01:52:49
ложь, поэтому это первый способ, которым мы
01:52:52
может решить эту конкретную проблему
01:52:54
второй способ - предоставить значение по умолчанию
01:52:56
значение для страницы, и мы бы сделали
01:52:59
что внутри компонента просмотра страниц
01:53:03
теперь этот подход может быть немного
01:53:04
утомительно, потому что это меняет способ
01:53:07
определяем реквизиты для нашего компонента
01:53:10
вместо использования массива простых
01:53:12
строковые значения, которые мы бы использовали для объекта
01:53:15
где имена свойств — это имена
01:53:17
нашего реквизита, и тогда было бы
01:53:20
объект дескриптора, который будет использоваться для
01:53:23
подтвердить эту опору, а также предоставить
01:53:26
значения по умолчанию, поэтому первый дескриптор
01:53:29
будет тип, так что это объект
01:53:32
если бы это была простая строка, мы могли бы
01:53:34
используйте строку или число или что-то еще, но
01:53:36
это объект, и поскольку это
01:53:39
объект, мы можем предоставить значение по умолчанию
01:53:41
но мы должны написать это как фабрику
01:53:43
функция, если бы это было простое значение, например
01:53:46
строку, то все, что нам нужно сделать, это
01:53:49
укажите строковое значение, но поскольку это
01:53:52
это объект, мы должны записать это как
01:53:54
функция туда, где мы получаем необработанные
01:53:57
реквизит, но в данном конкретном случае мы
01:53:59
на самом деле мне ничего из этого не нужно
01:54:01
информация, которая нам просто нужна, чтобы вернуть
01:54:03
объект, который имеет свойство заголовка страницы, мы
01:54:07
может инициализировать это как пустую строку
01:54:09
и тогда мы также можем предоставить контент
01:54:11
что также будет пустой строкой
01:54:12
так что вы можете себе представить, есть ли у вас
01:54:14
компонент, который имеет много разных
01:54:16
реквизит, если вы решите использовать объект для
01:54:20
Определите свой реквизит, который у вас будет
01:54:22
по существу описать их так в
01:54:24
по крайней мере, вам придется иметь
01:54:26
объект для каждого реквизита и имеет тип
01:54:29
для каждого из этих реквизитов, но это
01:54:31
собираемся решить и нашу проблему, потому что
01:54:33
теперь мы предоставили значение по умолчанию для
01:54:36
наша страница, поэтому, если передано неопределенное значение, это
01:54:40
значение по умолчанию будет предоставлено туда, где
01:54:43
заголовок страницы будет пустой строкой, поэтому
01:54:46
давайте обновимся, чтобы начать с нуля и
01:54:49
еще раз мы видим поведение, которое мы
01:54:51
ожидаемо, и приложение работает
01:54:53
все в порядке, теперь нет правильного или неправильного
01:54:55
подход к этому, но они служат
01:54:58
разные цели, если вы решите
01:55:00
определите дескрипторы для вашего реквизита
01:55:03
это в первую очередь для проверки реквизита
01:55:06
просто чтобы ты лучше понял ошибку
01:55:08
отчетность по мере разработки вашего
01:55:10
приложение, тогда как использование V if
01:55:13
директива была бы тем более
01:55:15
прямой и простой подход я
01:55:17
в любом случае он выполнит свою работу, когда вы
01:55:20
начните включать данные в свой
01:55:22
приложения, особенно загружающие данные
01:55:25
может сбить с толку, когда вам следует
01:55:27
загрузить данные и, к сожалению, их нет
01:55:30
жесткие и быстрые правила, которые говорят, что вы
01:55:33
должен загружать эти данные, когда они
01:55:36
абсолютно субъективно, это зависит от
01:55:38
ваше приложение, это также зависит от
01:55:41
ваше мнение о том, когда ваше заявление
01:55:44
нужно загрузить эти данные, но что я
01:55:46
обычно это сводится к двум
01:55:49
Критерии – это данные, используемые в
01:55:52
несколько компонентов или данные
01:55:55
специфично для одного компонента, поэтому давайте
01:55:58
посмотрите сейчас на пример того и другого
01:56:00
у нас есть массив страниц внутри
01:56:03
компонент приложения и, конечно же, это
01:56:06
страницы, которые наше приложение использует для
01:56:08
генерировать ссылки в навигационной панели
01:56:11
Массив страниц также используется для отображения
01:56:14
содержимое текущей страницы, поэтому, пока
01:56:17
просмотрщик страниц не обязательно использует
01:56:20
массив страниц внутри компонента it
01:56:23
зависит от массива страниц, поэтому
01:56:26
поскольку эти данные используются в нескольких
01:56:30
компоненты, которые я хочу загрузить как можно скорее
01:56:33
насколько это возможно или, по крайней мере, до этого
01:56:36
компоненты создаются и загружаются поэтому в
01:56:39
в нашем случае имело смысл загружать страницы
01:56:41
внутри компонента приложения с помощью
01:56:45
создал крючок, так что это здорово, но давайте
01:56:47
взгляните на панель навигации, потому что
01:56:49
На панели навигации теперь есть данные, конечно, есть
01:56:51
данные передаются через реквизит
01:56:54
например страницы, но есть данные, которые
01:56:57
специфично для этого компонента и только для этого
01:57:00
компонент, и именно эта тема сейчас в
01:57:03
общая схема вещей эти данные
01:57:05
не так важно, как страницы, потому что
01:57:08
без страниц приложения
01:57:10
вообще не работает, но это часть
01:57:12
предоставляя пользовательский опыт, который мы даем
01:57:16
им возможность изменить тему
01:57:18
панели навигации, так что это имеет смысл
01:57:20
продолжить и сохранить эту информацию
01:57:22
так что всякий раз, когда они снова посещают наш
01:57:25
приложение, мы можем загрузить настройки
01:57:27
что они предпочитают, теперь вы можете сделать
01:57:30
аргумент, что настройки также являются
01:57:33
Компонент уровня приложения, потому что когда
01:57:36
ты там начинаешь говорить о настройках
01:57:38
это компоненты, которые будут иметь разные
01:57:39
настройки и может имеет смысл загрузить
01:57:42
однако вся эта информация заранее
01:57:44
вы также можете привести аргумент, что это
01:57:47
должен быть загружен любым компонентом
01:57:49
будет использовать эту настройку и
01:57:51
это то, что мы собираемся рассмотреть в
01:57:52
этот урок, поэтому, когда дело доходит до хранения
01:57:55
и получения информации о теме, которую мы
01:57:57
можно подойти к этому по-разному
01:57:59
разными способами, и нет никакого права или
01:58:02
неправильный путь, я возьму больше всего
01:58:04
простой способ в этом уроке и
01:58:07
позже мы, вероятно, исправим это так
01:58:09
что вы можете получить представление о другом способе
01:58:12
что мы можем подойти к этому так ради этого
01:58:15
урок, который мы просто добавим в метод
01:58:17
это тот, который будет хранить
01:58:21
настройка темы, в этом случае что мы будем
01:58:24
сделать, это взять все, что находится внутри
01:58:27
свойство данных темы и сохраните его в
01:58:30
локальное хранилище, теперь нам нужно принять решение о
01:58:33
какой ключ мы собираемся использовать и я думаю
01:58:36
тема будет в порядке, так что
01:58:38
мы установим элемент в локальное хранилище
01:58:41
ключ — это тема, и данные будут
01:58:45
все, что находится внутри данных темы
01:58:48
свойство, давайте скопируем это, потому что это
01:58:50
будет основой для получения темы
01:58:54
настройка, в этом случае мы хотим
01:58:57
извлеките тему из локального хранилища, чтобы
01:59:00
мы вызовем метод получения элемента с помощью
01:59:03
ключ темы теперь возможно, что
01:59:06
этого элемента нет в локальном хранилище
01:59:09
при первой загрузке приложения
01:59:11
в браузере этого точно не будет
01:59:13
вот так нам нужно проверить, есть ли у нас
01:59:15
значение, если мы это сделаем, мы сможем продолжить
01:59:18
и мы можем установить тему, равную
01:59:21
все, что находится в локальном хранилище
01:59:23
в противном случае мы просто оставим тему как
01:59:26
по умолчанию, который светлый, и тогда мы
01:59:29
просто нужно решить, когда мы их будем использовать
01:59:31
методы, поэтому нам нужно сохранить тему
01:59:33
настройка всякий раз, когда мы меняем тему, поэтому
01:59:36
имеет смысл вызвать его после того, как мы установим
01:59:39
тему, а затем мы можем вызвать get
01:59:43
настройка темы внутри созданного хука
01:59:46
так что давайте продолжим и создадим это
01:59:50
метод, который мы назовем темой get
01:59:53
настройки, и все должно быть в порядке, так что давайте
01:59:56
зайди в браузер, давай откроем
01:59:57
инструменты разработчика, чтобы мы могли перейти к
02:00:00
вкладка приложения, поэтому, если мы перейдем к локальному
02:00:02
хранилище, а затем URL-адрес, который мы видим здесь
02:00:06
что нет ключа темы всякий раз, когда
02:00:09
мы нажимаем на переключатель, а затем обновляем
02:00:12
локальное хранилище, мы видим, что тема
02:00:15
установите темный цвет, поэтому, если мы обновим, обновите
02:00:18
эта страница, то тема, вероятно, должна
02:00:20
будет установлено, если мы изменим его обратно на
02:00:24
светлая тема, давайте освежим наш локальный
02:00:27
хранилище мы видим, что сейчас светло у нас
02:00:30
обновите страницу и, конечно, это
02:00:32
настройка теперь загружена, как я уже сказал, это
02:00:35
целиком и полностью зависит от
02:00:37
ваше приложение также зависит
02:00:39
по вашему мнению, когда вам следует
02:00:42
загрузите данные в свое приложение как
02:00:44
мы добавим больше настроек, это может сделать больше
02:00:47
смысл загружать все заранее, так что
02:00:50
это мы не затрагиваем локальное хранилище
02:00:52
несколько раз одновременно, но
02:00:55
опять же, это зависит от приложения
02:00:58
а также не бойтесь вносить изменения
02:01:01
к вашему приложению иногда проектирует
02:01:04
меняемся, мы очень редко никогда не понимаем это правильно
02:01:07
в первый раз, так что делай то, что делает
02:01:09
смысл, если это изменится позже, хорошо
02:01:12
вот почему мы разработчики
02:01:15
мы не можем говорить о данных, не поговорив
02:01:17
о получении данных от пользователя и
02:01:20
Основной способ, которым мы это делаем, – это
02:01:22
формы сейчас традиционно формы являются
02:01:24
самое утомительное занятие, с которым мы можем работать
02:01:27
на JavaScript, но, к счастью, просмотр позволяет
02:01:29
это намного проще, ведь оно мертво
02:01:33
просто, так что я хочу сделать в этом
02:01:35
урок по сути состоит в том, чтобы вынуть страницу
02:01:38
зрителя, потому что мы знаем, что это работает
02:01:39
и со временем мы добавим это обратно, но
02:01:42
прямо сейчас я хочу сосредоточиться на формах и я
02:01:44
хотим создать новый объект страницы, который мы
02:01:48
в конечном итоге добавит в наш массив страниц
02:01:50
и мы собираемся сделать это внутри
02:01:52
другой компонент, так что давайте просто позвоним
02:01:54
эта страница создания и этот компонент
02:01:57
должен иметь обратный вызов, чтобы приложение
02:02:01
будет знать, когда страница была создана
02:02:04
поэтому давайте просто назовем эту страницу созданной и
02:02:07
мы справимся с этим с помощью метода под названием
02:02:09
страница создана, давайте определим, что внутри
02:02:12
наши методы здесь, внутри приложения и для
02:02:15
прямо сейчас давайте просто возьмем страницу
02:02:17
возразить, что это будет получено и
02:02:20
напишите это в консоль и
02:02:22
в конечном итоге мы добавим это в
02:02:25
массив страниц, так что это основной
02:02:27
функциональность здесь, внутри приложения
02:02:29
компонент, мы можем перейти к нашим компонентам
02:02:32
папку и давайте создадим новый файл, который мы будем
02:02:34
назовите это, создайте страницу Dot View и насколько далеко
02:02:37
что касается шаблона, я уже
02:02:39
иметь наценку только потому, что это много
02:02:43
набираю текст и на самом деле нет целого
02:02:45
здесь есть два поля формы, одно для
02:02:48
заголовок страницы для содержания и
02:02:51
затем есть кнопка, которая будет
02:02:53
запустите эту созданную страницу, чтобы мы знали
02:02:57
что у нас есть этот реквизит, пойдем дальше
02:02:59
и Определите это, и мы сможем использовать только
02:03:03
простое определение реквизита, в этом нет необходимости
02:03:06
чтобы мы могли использовать объект дескриптора
02:03:09
обозначение, и мы знаем, что эта страница
02:03:11
созданный будет выполняться всякий раз, когда
02:03:13
пользователь нажимает на кнопку, итак, поехали
02:03:16
вперед и настройте событие клика, и мы
02:03:18
не обязательно знать, что мы собираемся
02:03:20
чтобы пройти, мы хорошо знаем, что собираемся
02:03:22
передать объект, который мы не знаем, что
02:03:24
значения еще будут, поэтому у нас есть
02:03:26
все подготовительные работы готовы к работе
02:03:29
теперь мы можем сосредоточиться на получении данных из
02:03:32
форма теперь с традиционным JavaScript
02:03:34
мы обычно применяем идентификатор к
02:03:38
input и элементы текстовой области, чтобы
02:03:40
мы можем ссылаться на эти элементы, чтобы получить
02:03:42
их ценности, и тогда мы готовы идти
02:03:44
мы не обязательно можем сделать это с видом
02:03:48
потому что помните, что мы находимся внутри
02:03:50
компонент, что означает, что если бы мы хотели
02:03:53
чтобы мы могли использовать несколько страниц создания
02:03:57
компоненты в одном представлении
02:03:59
компонент, который тогда у нас был бы
02:04:02
несколько текстовых областей, множественный ввод
02:04:04
элементы, имеющие одинаковые идентификаторы, которые
02:04:07
это никому не поможет, так что
02:04:09
вместо этого нам нужно подумать об использовании
02:04:11
инструменты, о которых мы уже знаем, такие как
02:04:14
данные привязки, например, для нашей страницы
02:04:17
заголовок, с которым мы могли бы сделать что-то подобное
02:04:20
где мы привязываемся к значению ввода
02:04:23
элемент, и мы могли бы назвать это просто
02:04:25
заголовок страницы, который означает, что мы бы
02:04:27
нужно определить это внутри наших данных
02:04:30
так что давайте продолжим и сделаем то, что можем
02:04:33
инициализируйте его пустой строкой и
02:04:36
это здорово, поэтому всякий раз, когда мы нажимаем на
02:04:38
страница создана, мы можем включить ее
02:04:41
заголовок там, так что давайте перейдем к браузеру
02:04:44
и мы не видим нашу форму, потому что я это сделал
02:04:47
не импортируйте это внутри приложения
02:04:50
компонент, поэтому мы хотим импортировать create
02:04:53
страницу, и мы хотим включить ее в
02:04:56
вариант компонентов, так что начнем
02:05:00
мы должны увидеть форму, давайте поднимем
02:05:03
консоль, чтобы мы могли увидеть, какой результат
02:05:05
мы получаем всякий раз, когда нажимаем на создание страницы
02:05:07
давайте просто нажмем на него, и мы увидим, что мы
02:05:09
есть объект с заголовком страницы, который
02:05:12
устанавливается пустая строка, что делает
02:05:13
в полном смысле, это то, что мы бы сделали
02:05:15
ожидать, потому что мы не предоставили
02:05:18
название еще нет, но давайте предоставим название
02:05:20
давайте нажмем на создание страницы и заметим
02:05:22
что на выходе будет тот же заголовок страницы
02:05:25
по-прежнему пустая строка и причина
02:05:27
очень просто, потому что всякий раз, когда вы привязываете
02:05:29
данные с использованием V-привязки да, вы привязываете
02:05:33
данные, но мы, по сути, говорим, что
02:05:35
значение этого входного элемента любое
02:05:39
название страницы в данный момент такое, какое прямо сейчас
02:05:42
в настоящее время это пустая строка, поэтому, если мы
02:05:45
укажите любой текст в качестве начального значения
02:05:47
для заголовка страницы всякий раз, когда мы возвращаемся к
02:05:50
браузер, давай обновим, мы собираемся
02:05:52
увидеть, что значение отображается на странице
02:05:55
заголовок, это односторонняя привязка, поэтому вместо этого
02:05:58
что нам нужно сделать, это обновить заголовок страницы
02:06:02
всякий раз, когда значение входного элемента
02:06:05
изменения, и мы можем сделать это с помощью
02:06:08
событие ввода, это обычный ввод Dom
02:06:11
событие, чтобы у нас была функция, которая
02:06:14
собираемся обработать событие ввода, которое мы получаем
02:06:17
объект события, и мы установим страницу
02:06:20
заголовок, равный цели события
02:06:23
что это за входной элемент, и мы бы
02:06:26
получить его значение, и теперь у нас есть это
02:06:28
двусторонняя привязка, поэтому теперь, хотя мы
02:06:31
иметь одностороннюю привязку со значением
02:06:34
и заголовок страницы сейчас обновляем
02:06:37
заголовок страницы всякий раз, когда значение в
02:06:41
браузер меняется, поэтому давайте вернемся к
02:06:43
браузер, давай введем что-нибудь, давай
02:06:46
нажмите «Создать страницу», и теперь мы видим это
02:06:49
значение — это то, чего мы ожидаем от него
02:06:51
быть заголовок страницы - это заголовок, но также
02:06:54
помните, что я сказал, что представление имеет
02:06:56
самый простой способ работы с формами это
02:06:59
однако это обязательно не так просто
02:07:02
есть указание, что мы можем это сделать
02:07:04
по сути делает то же самое и
02:07:06
это называется моделью V, и это создает
02:07:09
двусторонняя привязка между этим входом
02:07:12
элемент, а затем все, что мы указываем как
02:07:15
модель V, которая будет страницей
02:07:18
название, так что теперь мы это увидим
02:07:20
ту же функциональность, мы видим, что
02:07:23
заголовок страницы инициализируется этим
02:07:25
начальное значение, давайте изменим это, потому что
02:07:27
это глупо, поэтому мы инициализируем
02:07:29
это с пустой строкой, так что это
02:07:31
пусто, но тогда независимо от того, что мы набираем
02:07:34
внутри этого мы увидим это как
02:07:37
заголовок страницы, поэтому давайте нажмем «Создать страницу»
02:07:41
и вот мы идем, чтобы работать с
02:07:44
простые элементы формы — все, что нам нужно сделать
02:07:46
использовать эту модель V для привязки данных
02:07:50
свойство этого элемента управления формой, и это
02:07:53
это значит, что мы можем, по сути, сделать то же самое
02:07:55
вещь для нашей текстовой области, поэтому у нас будет
02:07:58
свойство данных, называемое контентом, мы будем
02:08:00
используйте модель V, чтобы связать этот контент с этим
02:08:04
текстовую область, чтобы каждый раз, когда мы нажимаем
02:08:08
на нашей кнопке создания страницы мы будем
02:08:11
укажите заголовок страницы и
02:08:14
контент, поэтому вернемся к браузеру
02:08:16
хотя нам нужно инициализировать
02:08:18
довольны значением, так что давайте вернемся
02:08:20
в браузер и давайте обновим
02:08:23
страница, потому что у нас там была ошибка
02:08:25
а теперь давайте дадим название, давайте просто
02:08:29
назовите эту четвертую страницу заголовком, и это
02:08:33
контент всякий раз, когда мы нажимаем «Создать»
02:08:35
страницу мы увидим в консоли, которую мы
02:08:38
есть объект, который имеет содержимое, которое
02:08:40
мы ввели, а также заголовок страницы в
02:08:44
предыдущий урок, с которым я вас познакомил
02:08:46
директиву модели V, чтобы вы могли
02:08:48
настроить двустороннюю привязку между форумом
02:08:51
элемент управления и свойство данных, и это
02:08:54
все хорошо, но это еще не все
02:08:56
работа с формами, а не просто получение
02:08:59
информация, которая нам также необходима, чтобы иметь возможность
02:09:01
подтвердите информацию, и это будет
02:09:03
также будет полезно иметь некоторые визуальные подсказки
02:09:06
например, если форма недействительна
02:09:10
тогда мы могли бы отключить страницу создания
02:09:13
кнопка, и она может остаться отключенной
02:09:15
пока у нас не будет действующей формы, так что давайте
02:09:18
начните с изменения формы, потому что
02:09:21
объект, который мы создаем, не является
02:09:25
завершено, нам также нужна ссылка, поэтому нам нужно
02:09:28
как минимум две другие части информации
02:09:29
например текст и URL-адрес
02:09:32
ссылку, поэтому я собираюсь вставить что-нибудь новое
02:09:35
разметка просто меняет нашу форму, поэтому
02:09:38
что теперь мы включаем текст ссылки и
02:09:40
URL ссылки, я также опубликовал это
02:09:43
флажок, о котором нам не стоит беспокоиться
02:09:45
примерно пока, но идея собирается
02:09:48
будь то, если оно будет опубликовано, мы увидим
02:09:50
ссылка в строке меню, если это не так
02:09:52
тогда мы этого не сделаем, это первое, что нам нужно
02:09:55
нужно настроить двустороннюю привязку
02:09:57
между элементом управления формой и нашими данными
02:10:00
свойства связанного текста и
02:10:03
URL-адрес ссылки и, конечно, у нас нет
02:10:06
эти ценности, но они будут
02:10:08
достаточно просто создать, мы назовем
02:10:10
текст ссылки просто текст ссылки для URL
02:10:13
мы назовем это URL-адресом ссылки и
02:10:16
инициализировать эти значения как пустые строки
02:10:19
и сейчас, потому что мы добавляем это
02:10:22
дополнительная информация имеет смысл, что мы
02:10:25
изменил код, который обрабатывает
02:10:28
нажмите на нашу кнопку, потому что мы просто
02:10:31
вызванная страница создана, мы передали
02:10:33
простой объект с заголовком страницы и
02:10:35
контент, теперь нам нужно кое-что сделать
02:10:37
валидации, и нам нужно создать более
02:10:39
сложный объект, поэтому давайте определим метод
02:10:42
мы назовем это формой отправки, и нам нужно
02:10:45
добавьте это в опцию методов теперь как
02:10:49
насколько этот метод формы отправки
02:10:51
обеспокоены тем, что нам не нужны никакие внешние
02:10:54
данные, такие как объект события, который
02:10:57
будет передано здесь, и причина в том,
02:10:59
потому что все данные, которые нам нужны,
02:11:01
прямо здесь, внутри наших данных, поэтому
02:11:04
первое, что мы собираемся сделать, это пойти
02:11:05
чтобы быть довольно утомительным, нам нужно сделать
02:11:07
уверен, что у нас есть какие-то ценности, на самом деле мы
02:11:10
нужны все значения, потому что по порядку
02:11:13
для создания объекта страницы нам нужен заголовок
02:11:17
нам нужен контент и нам нужна ссылка
02:11:20
информацию, поэтому, если какой-либо из этих
02:11:24
ценности отсутствуют, то мы не можем сделать наши
02:11:27
задание и создайте этот объект, чтобы мы
02:11:30
будет предупреждать пользователя о том, что он
02:11:34
нужно заполнить форму и тогда все
02:11:36
нам нужно вернуться, потому что есть
02:11:39
нам больше нечего делать, но если мы это сделаем
02:11:41
есть все данные, тогда мы можем позвонить
02:11:43
функция создания страницы, а затем мы
02:11:46
передаст объект, имеющий страницу
02:11:49
назовите контент, а затем мы создадим
02:11:52
объект ссылки, который имеет текст и URL-адрес
02:11:56
свойства, так что, закончив, давайте сделаем
02:11:59
проверка работоспособности, посмотрим, все ли в порядке
02:12:01
собираюсь на работу, так что давай прежде всего
02:12:03
нажимаем кнопку отправить и видим
02:12:06
конечно, это не сработает
02:12:08
пожалуйста, заполните форму, так что давайте просто
02:12:10
добавьте немного контента и убедитесь, что мы
02:12:12
мы не сможем отправить это
02:12:15
объект без предоставления всех
02:12:18
информацию, и мы все еще должны иметь
02:12:20
все настроено так, что мы выводим это
02:12:22
возражаем на консоль, и мы делаем это
02:12:25
есть контент, ссылка и
02:12:27
заголовок страницы просто фантастический, теперь я хочу
02:12:30
настроить визуальную подсказку, чтобы
02:12:32
кнопка будет отключена до тех пор, пока форма
02:12:35
действительно, и это может показаться чем-то вроде
02:12:37
излишне, тем более что мы уже
02:12:39
настройте метод отправки формы для проверки
02:12:42
эти ценности, но никогда не помешает иметь
02:12:45
избыточность, особенно когда дело касается
02:12:48
проверка, действительно ли что-то или нет
02:12:51
кроме того, наличие визуальной подсказки
02:12:53
всегда хорошее дело, чтобы мы могли добиться успеха
02:12:55
это несколькими разными способами, но
02:12:58
наверное, самое простое и самое
02:13:00
просто будет использовать
02:13:01
вычисленное значение, и назовем это
02:13:05
форма недействительна, это звучит странно
02:13:08
потому что обычно я хотел бы сказать:
02:13:10
форма действительна, но мы будем обязательными
02:13:13
это для
02:13:15
отключенный атрибут на кнопке, которая
02:13:18
означает, что когда отключено, это правда, тогда из
02:13:22
конечно, кнопка отключена, если она
02:13:24
неверно, тогда это не так, формулировка такова
02:13:28
сделать это немного проще
02:13:29
понять, что происходит, чтобы мы
02:13:31
не нужно разбирать это и делать
02:13:33
что-то вроде этого не является допустимой формой
02:13:36
так что это просто немного усложнить ситуацию
02:13:39
битти, поэтому, если форма недействительна, это правда, что
02:13:42
отключим кнопку, поэтому теперь мы просто
02:13:44
нужен код, чтобы проверить, является ли форма
02:13:47
недействительно, и у нас в основном уже есть
02:13:50
что если какое-либо из наших значений пусто
02:13:53
тогда это вернет true, и мы сможем идти
02:13:56
вернемся в браузер, и мы увидим это
02:13:58
кнопка отключена и начинаем
02:14:01
добавление значений вижу, что оно все еще отключено
02:14:04
пока вся форма не будет заполнена, если
02:14:07
мы очищаем любое из полей формы
02:14:10
он снова становится отключенным и
02:14:13
конечно, всякий раз, когда мы отправляем форму
02:14:15
объект отправляется обратно родителю, который
02:14:18
компонент приложения, где мы можем вывести это
02:14:21
информацию на следующем уроке мы
02:14:23
собираюсь изменить массив страниц так, чтобы
02:14:27
всякий раз, когда мы создаем страницу, она обновляется
02:14:29
меню, но мы также хотим только
02:14:32
отображать страницы, которые опубликованы
02:14:34
это означает, что нам нужно будет отфильтровать
02:14:37
страницы, которые находятся в навигационной панели в этом
02:14:40
урок, который мы, по сути, собираемся сделать
02:14:42
две вещи, которые мы прежде всего добавим
02:14:44
код для добавления объектов страницы на страницы
02:14:48
массив, чтобы мы отобразили их в
02:14:51
панель навигации, но мы также хотим взять
02:14:53
принять во внимание это новое опубликованное значение, поэтому
02:14:56
что если страница помечена как опубликованная, она
02:14:59
отображается в навигационной панели, если нет, то
02:15:02
ну, это не так, давайте начнем с
02:15:05
самое простое - изменить
02:15:09
массив страниц в этом буквальном смысле
02:15:12
Не может быть проще, все, что нам нужно сделать, это
02:15:14
вставьте новый объект страницы, и мы
02:15:18
сделано, так что урок в том, что что угодно
02:15:21
который изменяет или мутирует наш массив страниц
02:15:26
будет автоматически означать
02:15:29
посмотреть, что эти данные изменились обновить все
02:15:33
пользовательского интерфейса, который использует массив страниц, поэтому
02:15:36
любой встроенный метод массива, который изменяет
02:15:39
массив и есть несколько push-pop
02:15:42
сдвиг unshift сращивание сортирует даже в обратном порядке
02:15:46
это методы, которые изменяют массив
02:15:50
поэтому эти изменения будут
02:15:52
отражено в пользовательском интерфейсе, поэтому с помощью этого простого
02:15:55
изменить, мы можем добавить новую страницу, мы можем сказать
02:15:58
что это четвертая страница, и мы просто
02:16:00
есть контент, которым мы на самом деле не являемся
02:16:02
показываю эту информацию прямо сейчас
02:16:04
для связанного текста давайте воспользуемся четвертой страницей
02:16:07
а также и на самом деле мы могли бы сделать
02:16:10
что-то, чтобы сделать это немного
02:16:12
проще с точки зрения ввода данных
02:16:14
потому что часто заголовок страницы
02:16:17
может быть то же самое для ссылки на страницу, поэтому
02:16:19
это то, что мы могли бы захотеть
02:16:21
подумайте, а затем для URL давайте просто
02:16:23
позвони сюда
02:16:25
page4.html, и мы нажмем «Создать».
02:16:28
странице мы видим страницу 4 в строке меню и
02:16:32
URL-адрес
02:16:35
page4.html, поскольку этот код
02:16:38
обеспокоены тем, что мы золотые, теперь нам просто нужно
02:16:41
принять во внимание это опубликованное
02:16:42
значение теперь это потребует от нас
02:16:45
измените наш файлpages.json, потому что это
02:16:48
это исходное место, куда поступают наши данные
02:16:50
Итак, давайте сделаем это для домашней страницы
02:16:53
мы установим для параметра «Опубликовано» значение True, мы также
02:16:56
сделать то же самое для about но для
02:16:58
контакт, давайте установим для него значение false, чтобы мы
02:17:02
не увижу это в навигационной панели, так что
02:17:04
после этого нам нужно перейти к созданию
02:17:06
компонент страницы, потому что нам нужно взять
02:17:08
это опубликованное значение, поэтому мы
02:17:11
нужно настроить модель v для этой проверки
02:17:14
коробку, давайте просто назовем ее опубликованной и
02:17:17
давайте инициализируем это как false, чтобы
02:17:20
если что-то должно быть опубликовано
02:17:22
мы должны это проверить, хотя это может быть
02:17:25
что-то, что мы хотим использовать по умолчанию как
02:17:27
правда, я думаю, мы можем по умолчанию считать это правдой
02:17:29
это действительно не имеет значения, и мы это видим
02:17:31
внутри браузера, да, это
02:17:33
по умолчанию — true, так что все в порядке, но
02:17:35
нам нужно принять это во внимание
02:17:37
всякий раз, когда мы вызываем созданную страницу, мы будем
02:17:40
добавьте туда опубликованное свойство и мы
02:17:44
должно быть хорошо, но нам нужно
02:17:47
отфильтровать то, что у нас есть в навигационной панели, и
02:17:50
самый простой способ сделать это
02:17:52
имеет вычисленное значение, поэтому давайте перейдем к
02:17:55
navbar, мы добавим вычисляемую опцию и
02:17:58
давайте просто назовем это опубликованными страницами и
02:18:02
мы не хотим изменять массив страниц
02:18:06
в любом случае вместо этого нам нужно
02:18:08
вернуть массив, который имеет только
02:18:12
опубликованные страницы, и мы можем сделать это с помощью
02:18:15
вызов метода фильтра принимает
02:18:18
функция обратного вызова, которая возвращает логическое значение
02:18:21
значение, если это правда, то этот элемент в
02:18:24
массив будет в новом
02:18:26
массив, если он ложный, то он будет
02:18:28
быть опущено, поэтому в нашем случае все, что мы действительно
02:18:31
нужно сделать, это проверить опубликованные и
02:18:33
это даст нам отфильтрованный массив, поэтому
02:18:36
теперь мы можем использовать опубликованные массивы в наших
02:18:39
for Loop, поэтому мы заменим страницы на
02:18:42
опубликованные страницы, давайте вернемся и вуаля
02:18:46
мы видим дом и окрестности, так что давайте добавим
02:18:48
еще одна страница с некоторым содержанием, ссылка
02:18:51
текст Будет отражать заголовок страницы
02:18:55
URL-адрес на самом деле не имеет значения, потому что мы
02:18:57
у меня нет этого с самого начала, когда бы то ни было
02:18:59
мы нажмем на создание страницы и увидим ее
02:19:01
и всякий раз, когда мы создаем страницу, она будет
02:19:03
будет полезно очистить эту форму, так что давайте
02:19:07
добавьте также этот код, чтобы после того, как мы
02:19:10
создана страница вызова, мы установили все наши
02:19:13
свойства возвращаются к исходной стоимости
02:19:15
и это может быть немного утомительным процессом
02:19:18
и если это то, что нам нужно
02:19:20
сделайте несколько раз, тогда мы сможем просто написать
02:19:21
метод, называемый ясной формой, и который
02:19:24
сбросит форму до исходного значения
02:19:26
значение, так что просто чтобы убедиться во всем
02:19:28
работает так, как мы ожидаем, давайте еще добавим
02:19:32
еще одна страница, содержащая некоторый контент
02:19:36
связанный текст будет, но URL страницы будет
02:19:40
пока.html мл но этого не будет
02:19:43
опубликовано, поэтому прежде чем мы нажмем «Создать»
02:19:45
страница, которую я хочу сделать, это перейти к просмотру
02:19:47
инструменты разработчика, потому что я хочу увидеть
02:19:50
какими будут данные приложения, вот здесь
02:19:54
у нас есть массив страниц, который мы видим
02:19:55
у нас есть четыре страницы, но мы, конечно,
02:19:58
отображается только три, потому что
02:20:01
контакт в настоящее время установлен как не
02:20:04
опубликовано, поэтому мы собираемся добавить еще один
02:20:06
объект здесь, который не опубликован, поэтому мы
02:20:10
не вижу этого на панели навигации, но мы
02:20:12
не видел обновления страниц, давайте
02:20:15
вернемся назад, перейдем к другому компоненту
02:20:17
давайте вернемся к концу приложения, вот и начнем
02:20:20
у нас есть пять элементов в массиве и
02:20:23
самое крутое в этом то, что если
02:20:24
мы изменяем любую из этих опубликованных
02:20:26
значения, мы увидим результаты
02:20:29
автоматически в браузере, так что давайте
02:20:32
изменить опубликованное значение на true для контактов и
02:20:35
вот это мы хорошо увидим в следующем
02:20:37
урок, я думаю, что хочу сделать это
02:20:41
немного проще для конечного пользователя
02:20:42
потому что существует связь между
02:20:44
заголовок страницы и текст ссылки много
02:20:48
иногда они будут одинаковыми
02:20:50
поэтому было бы неплохо, чтобы по мере ввода
02:20:53
заголовок страницы, который мы видим по ссылке
02:20:56
текст автоматически обновляется, но, конечно
02:20:58
это будет не так просто
02:21:00
потому что ничего не бывает, но это будет
02:21:03
тем не менее, хорошая функция в этом уроке
02:21:06
мы собираемся улучшить возможности пользователя
02:21:08
опыт создания страницы и
02:21:12
причина в том, что есть почти
02:21:13
связь один-к-одному между страницей
02:21:15
заголовок и текст ссылки для большинства
02:21:19
страниц они будут одинаковыми
02:21:21
поэтому я хочу сделать это по мере ввода пользователем
02:21:24
в заголовок страницы, я хочу, чтобы они
02:21:27
символы будут автоматически
02:21:28
реплицируется в текстовом поле ссылки, поэтому
02:21:32
что для подавляющего большинства страниц
02:21:34
пользователю не нужно вводить это значение
02:21:36
это будет огромный рост производства
02:21:38
и как разработчик программного обеспечения это мое
02:21:42
задание, позволяющее пользователю получить работу
02:21:45
сделано, что им нужно сделать, однако
02:21:47
это не может быть так просто, потому что нет
02:21:50
каждый связанный текст будет
02:21:52
то же, что и заголовок страницы, поэтому в случае
02:21:55
когда связанный текст отличается, мы
02:21:58
нужно иметь возможность сохранить эту ценность
02:22:00
чтобы когда пользователь обновлял страницу
02:22:03
заголовок, который не отражен в связанном
02:22:06
текст, так что это звучит довольно сложно
02:22:08
но на самом деле это очень просто
02:22:12
реализовать, мы собираемся использовать то, что
02:22:13
вызвали наблюдателя, чтобы добавить наблюдателя, мы
02:22:17
нужно добавить опцию просмотра в нашу
02:22:21
компонент, а затем мы создаем метод
02:22:23
который имеет имя значения, которое мы
02:22:26
хотим посмотреть, поэтому в нашем случае мы хотим
02:22:29
следите за названием страницы, потому что это
02:22:31
что пользователь будет печатать
02:22:33
в значении заголовка страницы меняется это
02:22:37
Watcher собирается выполнить, и это
02:22:40
собирается дать нам доступ к новому названию
02:22:43
значение, а также старое значение заголовка и
02:22:46
это действительно все, что нам нужно сделать, мы
02:22:48
нужно проверить текст ссылки, который нам нужен
02:22:52
нужно посмотреть, равен ли он старому
02:22:54
название, потому что если это так, то мы знаем, что
02:22:56
пользователь не изменил текст ссылки, поэтому
02:23:00
в этом случае мы обновим
02:23:03
связанный текст с новым заголовком, однако, если
02:23:06
пользователь изменил текст ссылки затем
02:23:09
конечно, это будет отличаться от
02:23:10
старое название, и в этом случае мы не делаем
02:23:13
что угодно, чтобы мы могли вернуться к
02:23:14
браузер, и мы сможем это проверить, чтобы
02:23:17
мы начинаем вводить заголовок страницы, мы можем
02:23:19
увидеть, что связанный текст
02:23:21
автоматически обновляется, это будет
02:23:23
сэкономите нам много времени, чтобы мы
02:23:26
можем добавить некоторый контент, тогда мы можем добавить
02:23:29
URL, и тогда мы закончим, и тогда мы
02:23:33
можно начать добавлять пятую страницу, но
02:23:36
пользователь может решить: «ОК, я хочу»
02:23:38
на самом деле другое значение для пятой страницы
02:23:41
релизы для текста ссылки, так что это
02:23:43
будет какая-нибудь страница, но потом да, я
02:23:46
не хочу, чтобы заголовок страницы был страницей
02:23:48
пять, это будет что-то
02:23:51
совершенно разные и обратите внимание, что
02:23:53
связанный текст остается тем же значением, поэтому
02:23:56
у нас есть тот функционал, который нам нужен
02:23:58
и мы могли бы даже сделать шаг
02:24:00
далее, сделав что-нибудь со ссылкой
02:24:03
URL, есть много разных способов
02:24:05
что мы могли бы приблизиться к этому мы могли бы
02:24:06
возьмите связанный текст, мы можем сделать его
02:24:09
строчные буквы замените пробелы на
02:24:12
подчеркивание, а затем автоматически
02:24:14
заполните URL-адрес. Я имею в виду, что там много
02:24:17
вещи, которые мы могли бы сделать, чтобы положить конец
02:24:19
пользователям живется немного проще, но
02:24:21
вместо этого я хочу поговорить
02:24:22
о различиях между компьютерными
02:24:25
собственность и наблюдатель, потому что есть
02:24:28
между ними много путаницы, но
02:24:31
в основном это сводится к этому вычисленному
02:24:33
свойства просто возвращают значение, которое они
02:24:36
использовать имеющиеся данные, чтобы
02:24:39
вычислить значение, которое затем будет использоваться в нашем
02:24:42
шаблон, в который он не вносит никаких изменений
02:24:45
в нашем штате он ничего не мутирует
02:24:48
все это просто вычисляет значение на основе
02:24:50
по текущим данным The Watcher на
02:24:54
другая рука наблюдает за собственностью
02:24:57
измениться, и это дает нам возможность
02:25:01
внести изменения в наше состояние, рассчитанное таким образом
02:25:04
значения вычисляют и возвращают значение
02:25:05
Наблюдатели следят за изменением значения и
02:25:09
позволяет нам изменять наше состояние, помните
02:25:11
эти два правила, и у вас не будет
02:25:14
проблема с использованием вычисленных свойств и
02:25:17
Наблюдатели правильно события являются
02:25:20
жизненная основа любого приложения с
02:25:22
графический интерфейс, это основной способ
02:25:24
что мы взаимодействуем с пользователями, но в
02:25:27
с точки зрения нашего приложения View, это также
02:25:29
способ взаимодействия компонентов
02:25:31
друг с другом теперь технически
02:25:34
только события, которые мы использовали до сих пор
02:25:37
являются ли события Dom в любое время, которое мы установили
02:25:40
событие нажатия кнопки и даже
02:25:43
событие клика, которое мы настроили внутри
02:25:46
панель навигации, вы знаете, у нас есть эта панель навигации
02:25:48
компонент ссылки, где мы настраиваем клик
02:25:51
событие, даже если это сделано на
02:25:54
ссылка на панель навигации, которая на самом деле следует за ней
02:25:57
до элемента a, который
02:25:59
непосредственно внутри этого компонента, поэтому
02:26:01
все до сих пор было просто
02:26:03
типичные события Дома теперь мы эмулировали
02:26:07
события, такие как, например, внутри
02:26:10
создайте компоненты страницы, у нас есть эта опора
02:26:13
вызываемая страница, созданная там, где мы привязали
02:26:16
функция для этого реквизита, чтобы всякий раз, когда
02:26:19
создается объект страницы, мы называем это
02:26:21
функцию, а затем мы эмулировали это
02:26:24
событие, но это технически не
02:26:26
событие, однако мы можем создать свое собственное
02:26:29
пользовательские события, и есть преимущества
02:26:31
делать это, а не подражать им
02:26:34
как мы это сделали, например, мы
02:26:36
действительно может упростить наш компонент
02:26:39
потому что нам не нужно объявлять игрока
02:26:41
наши мероприятия мы можем, если захотим, и
02:26:44
могут быть некоторые преимущества в этом
02:26:46
это, но нам не нужно их декларировать
02:26:49
так что это одно, а второе
02:26:52
что это облегчает чтение нашего кода
02:26:54
Потому что давайте посмотрим на компоненты нашего приложения
02:26:57
Итак, у нас есть панель навигации, куда мы направляемся
02:26:59
много данных для разных реквизитов, тогда мы
02:27:02
посмотрим на компонент создания страницы, и мы
02:27:05
привязали что-то к созданной странице, но
02:27:08
мы не обязательно знаем, что это такое
02:27:10
пока мы не посмотрим на код и не
02:27:12
видишь, о, это метод, так что это будет
02:27:15
гораздо легче читать и понимать, что
02:27:17
именно происходит, если бы мы использовали
02:27:21
актуальный синтаксис для настройки события
02:27:23
обработчик, и теперь у нас создана страница
02:27:27
событие, которое мы обрабатываем с помощью
02:27:29
функция под названием страница создана, мы не
02:27:31
придется погрузиться в код внутри нашего
02:27:34
компонент, чтобы понять это
02:27:35
потому что это очень ясно, как то, кем мы являемся
02:27:38
делая только эту строку в нашем
02:27:41
шаблон, поэтому теперь нам просто нужно сделать
02:27:43
эта работа с пользовательским событием, и это
02:27:45
очень легко сделать, потому что все, что нам нужно
02:27:48
сделать, это отправить это событие, у нас есть специальное
02:27:52
свойство, называемое знаком доллара, теперь излучает
02:27:55
знак доллара нужен только для того, чтобы сказать это
02:27:57
это общественная собственность, так что это
02:27:59
что-то законное и на самом деле
02:28:02
рекомендуется использовать внутри наших
02:28:04
компоненты, это не что-то такое
02:28:06
частный или скрытый, поэтому мы хотим отправить
02:28:11
событие, называемое просто страницей, созданной для
02:28:14
первым аргументом, которому мы передали имя
02:28:17
событие, которое мы хотим испустить, и это
02:28:20
выдаст это событие, теперь есть
02:28:23
Здесь стоит обратить внимание: я использую Camel
02:28:25
регистр имени всякий раз, когда мы его публикуем
02:28:28
событие всякий раз, когда я настраиваю прослушиватель, я
02:28:31
используйте тире между страницей и
02:28:34
создано, поэтому я следую тем же правилам
02:28:36
что у нас есть для реквизита, за исключением этого
02:28:39
конечно, для мероприятий, поэтому, если все, что мы
02:28:42
нужно сделать, это опубликовать созданную страницу
02:28:45
событие, то мы закончили, но это не то
02:28:48
нам также необходимо предоставить информацию
02:28:51
связано с этим событием, поэтому для
02:28:54
второй аргумент, который мы собираемся передать
02:28:55
объект, который создается, когда это
02:28:59
страница создана, давайте сохраним ее.
02:29:02
зайди в браузер и давай проверим это
02:29:04
все остальное должно работать так же, как
02:29:07
так было раньше, поэтому все, что нам нужно, это немного
02:29:09
данные внутри этих полей, чтобы мы
02:29:11
можно нажать на создание страницы и вот она
02:29:13
вот страница, которую мы только что создали
02:29:16
и поскольку мы видим это здесь, это означает
02:29:18
что событие создания страницы произошло и
02:29:21
компонент приложения обработал это событие
02:29:24
все в порядке, теперь я сказал, что у нас нет
02:29:26
объявлять о наших событиях внутри нашего
02:29:29
компоненты, но мы можем, если захотим, и
02:29:31
в этом есть свои преимущества в первую очередь
02:29:33
из всех самый простой способ объявить
02:29:36
событие состоит в том, чтобы использовать опцию излучения и
02:29:39
это очень похоже на реквизит, где мы
02:29:41
может предоставить массив, содержащий
02:29:44
названия событий, которые мы излучаем
02:29:48
из этого компонента, поэтому страница создана и
02:29:52
это было бы самое простое, что мы могли бы сделать
02:29:54
можем сделать, мы также можем настроить эмиссию
02:29:58
собственность как объект, чтобы мы могли
02:30:01
выполнить проверку наших событий, поэтому для
02:30:04
пример, событие создания страницы должно
02:30:07
предоставить объект страницы, который был создан
02:30:11
поэтому внутри этого метода мы можем написать
02:30:15
код, который будет проверять полезную нагрузку
02:30:18
которые мы отправляем через страницу
02:30:21
создан даже в этом случае, например, если мы проверим
02:30:24
если заголовка страницы нет, то мы
02:30:29
хотел бы вернуть false, потому что
02:30:32
проверка этого объекта не удалась
02:30:35
должен иметь заголовок страницы, и если мы
02:30:37
необходимо предоставить любую информацию, которую мы
02:30:40
мог бы сделать это, просто написав что-нибудь
02:30:41
на консоль или мы можем посмотреть
02:30:44
консоль в браузере, так что давайте просто
02:30:46
верните false, скажем так, несмотря ни на что
02:30:48
того, что мы передаем для созданной страницы
02:30:51
событие, которое не пройдет проверку
02:30:53
теперь это не помешает нашему коду
02:30:56
от выполнения, как вы увидите, давайте
02:30:59
обновите, чтобы мы начали с
02:31:01
очистим панель навигации, давайте добавим новый элемент, давайте
02:31:05
поднимите инструменты разработчика, чтобы мы
02:31:07
можно просмотреть консоль, на которую мы нажмем
02:31:09
создайте страницу, сейчас мы увидим это предупреждение
02:31:12
в консоли неверные аргументы события
02:31:15
и что проверка не удалась, потому что
02:31:17
мы вернули false в нашем коде проверки
02:31:20
однако для события создания страницы посмотрите
02:31:24
на панели навигации есть объект, который
02:31:28
мы только что создали, так что этого не произойдет
02:31:29
помешать нашему коду работать, но он
02:31:32
дает нам возможность проверить
02:31:34
те объекты, которые мы включаем с помощью
02:31:38
событие, так что давайте сделаем это очень быстро
02:31:41
давайте разобьем этот объект страницы на
02:31:43
разные части, чтобы у нас было
02:31:45
заголовок страницы, у нас есть контент, а затем
02:31:48
у нас есть ссылка, а также у нас есть
02:31:49
опубликовано, не так ли, поэтому у нас четыре
02:31:52
фрагменты информации, поэтому теперь мы можем
02:31:54
проверьте, нет ли у нас заголовка страницы, тогда
02:31:57
мы вернем false, если у нас нет
02:32:00
содержание, тогда мы вернемся осень, тогда мы
02:32:04
могу проверить ссылку, если нет ссылки или нет
02:32:07
ссылка и какой это был текст или не ссылка
02:32:11
и URL, то, конечно, мы вернем
02:32:14
false, и тогда мы сможем проверить тип
02:32:16
наша публикация, поэтому, если тип публикации
02:32:21
не логическое значение, нет, давай не будем этого делать, давай
02:32:24
просто оставьте публикацию в покое, так что если
02:32:27
все остальное пройдет, тогда мы просто
02:32:29
просто верните true и все готово
02:32:32
опять же, это 100 по желанию, ты не хочешь
02:32:35
должны заявлять о своих мероприятиях, а вы этого не делаете
02:32:38
должны их подтвердить, но способность
02:32:40
сделать это есть, и он определенно может
02:32:43
облегчить задачу по мере развития вашего
02:32:46
приложения и ты такой, какой ты есть
02:32:48
их отладка
02:32:49
возможность создавать собственные события
02:32:52
фантастическая функция, и она вам понравится
02:32:54
будет использоваться в большинстве ваших
02:32:56
приложения, но есть некоторые
02:32:58
ограничения и, вероятно, наиболее
02:33:00
громоздким является то, что этот компонент излучается
02:33:03
события не очень хорошо разгораются, что я имею в виду
02:33:05
к тому же, давайте просто подумаем
02:33:08
обычный HTML и JavaScript, давайте забудем
02:33:10
о просмотре на минутку и скажем так
02:33:13
что мы нажимаем на кнопку ну то есть
02:33:15
собираюсь сгенерировать событие щелчка и
02:33:18
целью этого мероприятия будет то, что
02:33:20
элемент кнопки, но событие не
02:33:23
остановись на этом, по крайней мере, по умолчанию это
02:33:25
собирается Bubble Up к своему родителю, который
02:33:28
это элемент формы, то оттуда он
02:33:31
собирается Bubble Up к своему родителю, который
02:33:33
это элемент div, который затем будет всплывать
02:33:36
до навигации, и он будет продолжать пузыриться
02:33:38
пока он не достигнет вершины элемента
02:33:40
иерархия и тот факт, что события
02:33:43
пузырь дает нам возможность вызвать
02:33:46
событие на элементе, и тогда мы можем
02:33:49
прослушайте это событие выше в
02:33:51
иерархия, которая может показаться, что это не так
02:33:54
очень полезно, но я гарантирую вам, что это так
02:33:57
теперь давайте подумаем о компоненте представления
02:34:00
всякий раз, когда вы генерируете событие изнутри
02:34:03
компонента, это событие может быть только
02:34:06
прослушивается внутри прямого родителя
02:34:09
компонент не всплывает
02:34:13
иерархию, поэтому, например, мы создали
02:34:17
пользовательское событие внутри страницы создания
02:34:20
компонент, в котором мы создали страницу
02:34:23
созданное событие, которое мы прослушивали для этого события
02:34:27
внутри приложения теперь, конечно, приложение
02:34:30
вершине иерархии, но если бы существовал
02:34:32
что-то большее, чем приложение, это событие
02:34:35
не будет пузыриться, он останавливается здесь, внутри
02:34:38
компонента приложения, и это может быть
02:34:40
очень громоздко, потому что бывают моменты
02:34:42
что нам нужно прослушать событие, которое
02:34:45
происходит глубоко внутри компонента
02:34:47
иерархию, и есть способы, которыми мы можем
02:34:49
обойти это, например, я
02:34:51
собираюсь реорганизовать нашу ссылку на панель навигации здесь
02:34:55
так что это внутри ссылки на панели навигации, которую мы
02:34:57
есть элемент l i, поэтому мы собираемся
02:35:00
сгенерируйте это здесь, внутри ссылки на панели навигации
02:35:03
я думаю, что вместо внутри навигационной панели
02:35:06
в таком случае имеет смысл
02:35:09
означает, что нам нужно использовать цикл for
02:35:12
и все остальное и место
02:35:15
от этого по ссылке на панели навигации мы можем избавиться
02:35:18
этот элемент Li и по большей части
02:35:22
однако это будет работать нормально
02:35:25
сейчас я скажу, что это действительно
02:35:27
нет смысла слушать что-либо
02:35:30
какие события здесь, по ссылке на панели навигации
02:35:33
вместо этого мы хотели бы создать событие
02:35:36
изнутри ссылки на панели навигации, чтобы
02:35:39
всякий раз, когда мы нажимаем на ссылку, мы устанавливаем
02:35:42
включить прослушиватель событий для генерации события
02:35:45
который мы можем назвать Просто активированным, но
02:35:48
в данном конкретном случае единственный
02:35:50
компонент, который должен знать, что это
02:35:53
ссылка активирована, это на самом деле наше приложение
02:35:56
компонент, потому что именно здесь мы
02:35:58
на самом деле сделать что-то для того, чтобы
02:36:00
компонент приложения, чтобы знать, что
02:36:03
произошло активированное событие, мы бы имели
02:36:05
связывать события так, чтобы внутри
02:36:09
панель навигации, мы бы это прислушались
02:36:12
активированное событие, но тогда мы выпустим
02:36:15
как-то иначе это можно было бы назвать
02:36:17
активирован или его можно было бы назвать
02:36:19
что-то еще, и тогда нам придется
02:36:21
передать эту информацию, чтобы мы потом
02:36:24
мог бы прослушать это внутри приложения
02:36:26
работает, но это очень утомительно и заставляет
02:36:29
наш код намного сложнее, это также делает
02:36:32
это гораздо сложнее понять
02:36:35
взгляд, потому что мы должны следить за
02:36:37
цепочка событий, поэтому в предыдущих версиях
02:36:40
посмотреть, что мы будем делать, это создавать то, что
02:36:43
называемая глобальной шиной событий, она позволяет нам
02:36:46
по существу генерировать электронные события по всему миру, поэтому
02:36:50
что мы можем излучать их из любого компонента
02:36:53
и слушать эти события внутри
02:36:55
любой другой компонент независимо от
02:36:57
отношения между этими компонентами
02:36:59
проблема теперь в том, что с представлением 3 мы
02:37:03
на самом деле у нас нет такой способности, которая есть у нас
02:37:05
писать много дополнительного кода, чтобы
02:37:07
создадим свой собственный глобальный автобус событий, и это
02:37:12
меня расстраивает хотя бы потому, что это
02:37:13
это была модель, которая была очень распространена
02:37:16
используется во второй версии представления, и я бы
02:37:19
хотелось бы увидеть что-то вроде
02:37:20
это встроено, но с небольшим количеством
02:37:24
дополнительного кода мы можем написать свой собственный
02:37:26
Глобальная шина событий, вот кто мы
02:37:29
собираюсь сделать внутри исходной папки
02:37:32
мы собираемся создать новую папку, я
02:37:34
собираюсь позвонить, использует идею, заключающуюся в том, что
02:37:36
что это будет содержать некоторые
02:37:38
утилиты, которые мы можем использовать в наших
02:37:40
приложение и одна из этих утилит
02:37:43
будет называться событиями, поэтому мы
02:37:46
просто назовите это event.js, и мы
02:37:49
собираемся создать объект, на самом деле мы
02:37:51
собираюсь создать карту, которую мы будем использовать
02:37:53
чтобы быть в курсе всех наших событий и
02:37:57
затем мы собираемся экспортировать объект
02:37:59
которые будут иметь методы, которые позволят нам
02:38:01
настраивать события, а также отправлять их так
02:38:05
давайте начнем с метода, который будет
02:38:07
позвольте нам прослушивать события, которые я собираюсь
02:38:09
назвать это очень похоже на идею
02:38:12
из jQuery туда, где мы могли бы использовать on
02:38:15
метод, а затем мы можем указать событие
02:38:18
имя, а затем укажите функцию
02:38:20
хотя в данном случае давайте просто позвоним
02:38:23
этот доллар, потому что это следует за
02:38:25
соглашение, которое мы найдем внутри
02:38:28
наши компоненты представления, поэтому здесь мы хотим
02:38:30
проверьте, нет ли у нас мероприятия
02:38:33
с заданным именем и объектом карты
02:38:36
дает нам этот метод has, чтобы мы могли
02:38:39
проверяем, есть ли у нас ключ с данным
02:38:43
название события, а если нет, то мы это сделаем
02:38:47
создайте его, и мы присвоим ему значение
02:38:50
пустой массив, так что тогда у нас будет
02:38:53
массив, и вот как мы собираемся
02:38:55
отслеживать все функции, которые
02:38:58
настроены для данного события, поэтому мы будем
02:39:00
получить массив для данного события и
02:39:04
тогда мы вставим функцию, которая
02:39:06
мы хотели послушать, потому что могли сделать
02:39:08
что-то похожее на удаление события, но
02:39:12
это требует немного дополнительного кода, поэтому
02:39:13
Я не собираюсь это реализовывать
02:39:15
у нас будет этот метод, чтобы, если мы
02:39:18
в конечном итоге оно понадобится, тогда мы сможем
02:39:20
реализую это позже, так что сейчас я просто
02:39:23
собираюсь бросить предмет, у которого есть
02:39:25
сообщение о том, что не реализовано и
02:39:27
все будет хорошо, и тогда нам нужно
02:39:29
метод генерации нашего события для его запуска
02:39:33
если хочешь, я просто воспользуюсь
02:39:36
та же терминология, которая используется внутри
02:39:38
view, и это означает генерировать событие, поэтому мы
02:39:41
нужно название события, нам также нужно любое
02:39:45
предоставленные данные и еще раз нам нужно
02:39:47
проверьте, есть ли у нас какие-либо события с
02:39:51
заданное имя события, и если мы это сделаем, то
02:39:54
мы хотим выполнить все функции
02:39:56
которые были созданы для этого мероприятия
02:39:57
что очень легко сделать, мы еще раз
02:40:00
хотим получить этот массив, и мы это сделаем
02:40:03
просто используйте для каждого метода, где
02:40:05
мы выполним функцию, передаваемую в
02:40:07
данные, и вот мы идем, а затем
02:40:10
вопрос в том, как нам это добавить
02:40:12
возразить против нашего приложения, которое мы хотим
02:40:15
сделать его очень простым в использовании, поэтому мы
02:40:18
можно просто добавить его ко всем
02:40:20
компоненты, где мы хотим их использовать, и
02:40:22
импортируйте это и все такое, и нет
02:40:25
это много работы вместо того, что мы
02:40:27
сделаю это частью нашего
02:40:30
приложение, чтобы мы могли использовать его из
02:40:32
внутри наших компонентов, где бы мы ни находились
02:40:34
хочу, и нам не нужно его импортировать
02:40:36
где-либо еще, кроме как изнутри
02:40:39
main.js, так что давайте импортируем этот объект, который я
02:40:43
просто назову это долларовым автобусом и
02:40:45
это из событий утилит, и нам нужно
02:40:50
разбейте нашу строку кода, где мы
02:40:53
создаем приложение, а затем монтируем его
02:40:56
вроде того, что мы делали еще когда-то, когда мы
02:40:58
начал это путешествие, чтобы между
02:41:00
создавая приложение и затем монтируя его, мы
02:41:03
хочу добавить к нашей конфигурации есть
02:41:07
свойство под названием «Глобальные свойства» и
02:41:09
это позволяет нам добавлять свойства к
02:41:12
каждый компонент в нашем приложении
02:41:15
чтобы мы могли позвонить этому долларовому автобусу, мы можем
02:41:18
назовем это долларовым автобусом событий, мы можем это назвать
02:41:21
все, что мы хотим, это не имеет значения, но
02:41:24
Я буду называть это просто долларом
02:41:26
bus, и мы присвоим ему это значение, поэтому
02:41:29
теперь каждый из наших компонентов собирается
02:41:31
иметь этот долларовый автобус, чтобы мы
02:41:34
можете использовать нашу глобальную шину событий из
02:41:37
где угодно, это значит внутри навигационной панели
02:41:40
Ссылка, что мы можем сделать, это использовать наш автобус, который мы
02:41:45
вызовет метод излучения, и нам нужно
02:41:47
что-то немного больше
02:41:49
описательный, потому что сейчас мы имеем дело
02:41:51
с глобальными событиями, так что назовем это
02:41:53
Ссылка на панель навигации активирована, и это будет
02:41:57
полезно предоставить индекс, который мы
02:41:59
нет, но это достаточно легко сделать
02:42:01
мы можем добавить индекс в качестве реквизита, а затем
02:42:05
внутри панели навигации мы можем добавить индекс
02:42:09
здесь, и я думаю, нам, наверное, стоит
02:42:11
переименуйте это из ссылки на панель навигации в панель навигации
02:42:14
предмет, но мы оставим его как есть для
02:42:16
сейчас так сейчас нам просто нужно прислушаться
02:42:19
это событие, и мы можем сделать это внутри
02:42:21
приложение, но прежде чем мы это сделаем, есть ли у нас какие-либо
02:42:25
другой код здесь, у нас была эта навигационная ссылка
02:42:28
нажмите кнопку, мы можем избавиться от этого, и я
02:42:31
не думаю, что мы где-либо упоминаем об этом
02:42:34
иначе, так что нам следует пойти так
02:42:36
это все, что нам нужно сделать, это внутри приложения
02:42:38
это прослушивание этого события, вот что
02:42:42
мы бы сделали, это установили нашу активную страницу равной
02:42:46
к предоставленному индексу, так что давайте сократим это
02:42:48
давайте избавимся от этой навигационной ссылки, нажмите
02:42:51
опора, и поскольку это уже есть у нас
02:42:53
создал здесь крючок, это будет
02:42:55
идеальное место для прослушивания этого Global
02:42:58
мероприятие, поэтому мы воспользуемся нашим автобусом
02:43:01
объект, и мы будем слушать
02:43:05
Ссылка на панель навигации активирована, и это происходит
02:43:08
чтобы дать нам индекс, чтобы мы могли
02:43:13
установите значение активной страницы, равное
02:43:16
каким бы ни был индекс, так и должно быть
02:43:19
все еще работаю так, как должен, потому что у меня нет
02:43:21
на самом деле проверил это на карте, которая у меня есть
02:43:24
вместо этого всегда использовал просто нетипичный объект
02:43:27
карты, но мне кажется, что карта подходит для этого
02:43:30
цель лучше, чем обычный объект, поэтому
02:43:32
пойдем в браузер, давай обновим
02:43:35
здесь, и давайте нажмем на нашу ссылку и
02:43:38
ничего не происходит, так что давайте возьмем
02:43:40
посмотри на консоль, у нас есть ошибки
02:43:42
здесь так имена событий не определены и
02:43:46
это потому что я где-то опечатался
02:43:49
внутри событий, чтобы это было здесь
02:43:53
строка 18, так что давайте избавимся от этого, давайте
02:43:57
вернись в браузер и попробуй
02:44:00
это еще раз, давай нажмем «о» и все
02:44:02
похоже, он активируется, если мы нажмем на
02:44:05
дома мы видим то же самое, так выглядит
02:44:07
вроде всё работает, зайдём в приложение
02:44:09
компонент и давайте раскомментируем наш
02:44:12
просмотрщик страниц, чтобы мы могли увидеть,
02:44:15
страница тоже изменится, поэтому
02:44:18
давайте обновим, у нас есть контент, если мы
02:44:20
нажмите на кнопку «Около», и мы увидим, что это
02:44:23
тоже изменилось, так что мы готовы идти, мы
02:44:26
теперь у нас есть глобальная шина событий, которую мы можем
02:44:28
использовать в нашем приложении сейчас много
02:44:31
иногда вам может не понадобиться глобальное событие
02:44:34
автобус, но если ты это сделаешь, ты сможешь
02:44:37
Реализуйте одно наше маленькое приложение
02:44:40
технически это одностраничное приложение
02:44:42
это одна страница, которая загружается в
02:44:44
браузер, и тогда мы сможем перемещаться
02:44:47
к другим частям приложения
02:44:49
например, сейчас все, что мы можем
02:44:52
навигация осуществляется между домом и окружением
02:44:54
страницы, но если подумать, это
02:44:56
не очень масштабируема, поскольку страницы
02:44:59
которые у нас есть на данный момент, это все
02:45:01
тот же тип, на самом деле он основан на данных
02:45:04
на основе данных об этих страницах, но
02:45:06
у нас также есть компонент, созданный страницей
02:45:10
который имеет форму, чтобы мы могли создать
02:45:12
больше страниц, которые в идеале должны быть внутри
02:45:16
другой страницы, по которой мы будем перемещаться
02:45:18
и тогда, если бы у нас были какие-либо другие
02:45:20
утилиты, такие как возможность перечислить все
02:45:22
страниц и редактировать их все эти
02:45:25
будет и на других страницах, поэтому, если
02:45:28
вы планируете делать какую-либо навигацию
02:45:30
в ваших приложениях это дает много
02:45:33
имеет смысл просто пойти вперед и получить
02:45:34
начал с роутера, теперь давайте установим
02:45:37
маршрутизатор, а затем мы поговорим о
02:45:39
что это такое для наших приложений просмотра
02:45:42
мы хотим установить View Router и
02:45:45
мы хотим сохранить это в нашем проекте сейчас
02:45:47
маршрутизатор в смысле программного обеспечения
02:45:51
разработка требует ввода данных пользователем и маршрутов
02:45:55
это какой-то фрагмент кода, который собирается
02:45:57
для обработки этого ввода, если вы думаете о
02:46:00
серверное приложение, такое как laravel или
02:46:03
asp.net обычно есть маршрутизация
02:46:06
двигатель, который ищет входящий
02:46:08
запросы, и он будет маршрутизировать эти
02:46:10
запросы к различным методам на
02:46:13
контроллер, та же идея применима и к
02:46:15
наше приложение View, у нас есть маршрутизатор
02:46:18
который будет маршрутизировать URL-адреса на
02:46:21
компонент, так что он по существу лечит
02:46:24
отдельный компонент как отдельный
02:46:26
страница в нашем приложении, но
02:46:29
все приложение загружается в течение
02:46:32
одна страница теперь причина, по которой вы бы
02:46:35
хочу начать с просмотра маршрутизатора, чтобы
02:46:37
начните с того, что у вас есть какие-либо
02:46:39
навигация, потому что она меняет путь
02:46:42
что вам нужно развивать свой
02:46:44
приложение, как, например, у нас есть
02:46:46
это приложение на нем, которое по сути является
02:46:50
точку входа нашего приложения я знаю
02:46:52
что основной файл JS, но это
02:46:55
куда мы загружаем наши данные, здесь мы
02:46:57
передать данные другим компонентам, чтобы
02:47:00
это основная часть нашей
02:47:02
приложение, но всякий раз, когда мы представляем
02:47:05
возможность перехода на другие страницы
02:47:07
ну, то, как мы взаимодействуем с нашими
02:47:10
данные меняются, потому что это не так
02:47:11
обязательно что-то, что мы можем просто
02:47:13
загрузите здесь внутри нашего компонента приложения
02:47:16
вместо этого это то, что мы почти
02:47:17
нужно сделать внутри каждого человека
02:47:19
компонент, который будет работать
02:47:21
с этими данными, и вы поймете, почему это
02:47:24
Итак, первое, что нам нужно сделать, это
02:47:26
Определим маршруты для нашего роутера и
02:47:30
мы собираемся сделать это внутри
02:47:31
отдельный файл, и мы можем просто вызвать это
02:47:35
Routes.js и первое, что нам нужно
02:47:37
сделать, это импортировать две функции, первая
02:47:40
будет называться создание маршрутизатора, это
02:47:43
конечно, то, что мы используем для создания
02:47:45
маршрутизатор, но всякий раз, когда мы создаем маршрутизатор
02:47:47
мы также должны сказать ему, как с ним обращаться
02:47:49
URL-адреса или, по крайней мере, как обрабатывать
02:47:52
истории, и поскольку у нас ее нет
02:47:54
поддержка серверного приложения, что мы
02:47:57
мы собираемся использовать веб-хэш
02:48:00
историю, поэтому нам нужно также импортировать это
02:48:04
функция, называемая созданием истории веб-хэшей
02:48:06
и мы будем использовать это всякий раз, когда мы
02:48:08
создайте наш маршрутизатор, чтобы мы хотели импортировать
02:48:11
это с точки зрения маршрутизатора, а затем мы
02:48:14
создадим наш маршрутизатор, который мы назовем
02:48:17
создайте функцию маршрутизатора, а затем мы будем
02:48:19
передать объекту первое свойство
02:48:21
что нам нужно определить, это история
02:48:23
как будут относиться к истории
02:48:26
внутри этого маршрутизатора, и здесь мы
02:48:28
используйте это для создания истории веб-хэшей и
02:48:31
тогда второе свойство — это маршруты
02:48:34
что мы собираемся определить для нашего
02:48:36
приложение это массив объектов
02:48:39
и самые простые объекты собираются
02:48:42
есть две вещи, которые будут
02:48:45
URL-путь — это, по сути, то, что мы
02:48:47
увидел бы в строке адреса и это
02:48:50
как мы определяем, какие запросы получают
02:48:53
направляется к каким компонентам, таким образом, домой
02:48:56
нашего приложения будет просто косой чертой
02:48:59
и тогда нам нужно будет указать
02:49:01
компонент, который по сути будет
02:49:03
обрабатывать этот URL-адрес так в смысле нашего
02:49:07
приложение всякий раз, когда мы переходим к
02:49:10
home любой компонент, который мы указываем,
02:49:14
будет отображаться теперь у нас есть
02:49:16
что-то уже доступное, что есть
02:49:18
отвечает за отображение контента и
02:49:20
это наша программа просмотра страниц, однако, если
02:49:23
вы помните, что программа просмотра страниц очень
02:49:25
зависит от данных, которые он получает
02:49:27
он должен иметь возможность отображать
02:49:30
отдельные страницы, и мы передаем это
02:49:32
данные через реквизит, а теперь, когда мы
02:49:34
собираемся использовать маршрутизатор, мы действительно не можем
02:49:37
использовать реквизит, я имею в виду, что мы можем, но все данные
02:49:41
это будет передано в
02:49:43
компонент сейчас будет готов
02:49:45
через URL-адрес, а не через родительский
02:49:48
компонент, поэтому мы, по сути, собираемся
02:49:51
нарушить наше приложение, а затем мы
02:49:53
исправлю это, чтобы оно работало с
02:49:56
маршрутизатор, чтобы у нас был домашний маршрут
02:49:59
который будет нашим средством просмотра страниц, но
02:50:01
тогда нам также нужен маршрут, чтобы иметь возможность
02:50:04
чтобы создать страницу, давайте определим маршрут
02:50:08
у которого есть URL-адрес Slash create, а затем
02:50:11
мы хотим, чтобы компонент создания страницы был
02:50:15
отображается всякий раз, когда этот маршрут обрабатывается
02:50:18
теперь, конечно, нам нужно импортировать эти
02:50:20
компоненты, поэтому давайте сначала импортируем
02:50:22
просмотрщик страниц из наших компонентов
02:50:26
просмотрщик страниц папок, тогда нам также понадобится
02:50:29
также создайте компонент страницы, а затем
02:50:31
после того, как мы создадим этот маршрутизатор, мы
02:50:34
просто собираемся экспортировать его, чтобы мы могли
02:50:37
затем импортируйте это в наш основной файл
02:50:40
теперь мы еще можем сказать, что наше приложение
02:50:43
компонент будет хорошо
02:50:46
компонент приложения, но потом мы расскажем, скажем
02:50:48
наше приложение, что у нас есть этот роутер
02:50:50
что мы хотим использовать, давайте импортируем это
02:50:53
из маршрутов, а затем мы хотим вызвать
02:50:57
метод в нашем приложении просто называется use the
02:51:00
метод use позволяет нам передать плагин и
02:51:04
объект маршрутизатора, который мы только что создали
02:51:06
это плагин, с помощью которого мы сообщаем нашим
02:51:08
приложение для использования маршрутизатора мы все еще
02:51:11
необходимо изменить наши глобальные свойства и
02:51:13
затем мы монтируем наше приложение теперь
02:51:15
другое изменение, которое нам нужно сделать, это
02:51:17
внутри нашего компонента приложения мы по-прежнему
02:51:20
хочу, чтобы здесь была наша панель навигации, но все остальное
02:51:23
мы не хотим, потому что маршрутизатор
02:51:26
собираюсь загрузить эту информацию и
02:51:28
мы сообщаем нашему приложению, что хотим
02:51:30
отобразить информацию о маршрутизаторе правильно
02:51:33
здесь с этим компонентом просмотра маршрутизатора, так что
02:51:36
компонент, который будет загружен
02:51:38
маршрутизатором появится здесь или
02:51:41
если бы мы хотели, чтобы это было над панелью навигации, которая
02:51:43
это не имеет особого смысла, мы
02:51:45
можно было бы сделать и это, но идея в том
02:51:47
что это заполнитель, поэтому
02:51:49
всякий раз, когда маршрутизатор представления перемещается по
02:51:52
пользователя к компоненту, который является компонентом
02:51:55
будет отображаться прямо здесь, поэтому наш
02:51:58
просмотрщик страниц ничего не сделает
02:52:01
прямо сейчас, так что давайте изменим это так, чтобы
02:52:04
у нас есть текст, который мы можем видеть, поэтому
02:52:06
у нас будет только заголовок страницы, а затем
02:52:08
у нас будет контент и всякий раз, когда мы
02:52:11
зайдите в браузер, мы должны увидеть, что мы
02:52:13
есть наша панель навигации, а затем у нас есть
02:52:15
заголовок страницы, поэтому обратите внимание на URL-адрес, который у нас есть
02:52:18
хэш, потому что всякий раз, когда мы создавали
02:52:21
маршрутизатору, которому мы сказали использовать хэш
02:52:24
историю, поэтому, если мы хотим перейти к
02:52:27
создайте страницу, нам нужно будет произнести хеш
02:52:31
слэш, а затем создать, и это займет
02:52:34
нас на страницу создания, которую вы можете увидеть
02:52:36
теперь наш компонент создания страницы и так
02:52:39
теперь возникает вопрос, как нам получить
02:52:41
наши данные сейчас, конечно, это навигационная панель
02:52:44
все еще отображаю ссылки на них
02:52:46
страницы и причина очень проста
02:52:48
потому что мы все еще загружаем эти данные
02:52:50
внутри компонента приложения, и мы
02:52:52
передать эти страницы на панель навигации, но
02:52:55
мы только что эффективно сломали
02:52:58
функциональность данных активной страницы
02:53:01
потому что это то, что мы использовали, чтобы
02:53:04
отобразить данную страницу сейчас, конечно,
02:53:06
активная страница зависела от знания
02:53:09
индекс страницы, которая была в данный момент
02:53:11
отображается, что информация теперь находится в
02:53:13
URL, и мы можем получить эту информацию от
02:53:16
Параметры маршрута, которые мы рассмотрим в
02:53:18
следующий урок
02:53:20
прежде чем мы просто углубимся и начнем
02:53:22
рефакторинг нашего приложения мы в первую очередь
02:53:24
всем нужно поговорить о том, как нам нужно
02:53:26
проведем рефакторинг нашего приложения и давайте сначала
02:53:29
из всего лишь вкратце о том, что у нас было
02:53:32
поэтому у нас было приложение, которое полагалось
02:53:34
на массив объектов страницы, и мы
02:53:38
использовал этот массив для создания меню
02:53:42
в этом меню было несколько ссылок, которые всякий раз, когда
02:53:44
мы нажали на ссылку, на самом деле это не так
02:53:46
переведите нас на другую страницу, но это
02:53:48
загрузил содержимое объекта страницы
02:53:52
который был связан со ссылкой, которая
02:53:54
мы нажали и все это было
02:53:56
обрабатывается через компонент приложения
02:53:59
отслеживал любую ссылку, по которой мы нажимали
02:54:02
и затем предоставил страницу
02:54:06
компонент просмотра страниц, чтобы затем
02:54:09
контент будет отображаться, но в
02:54:11
в предыдущем уроке мы добавили маршрутизатор просмотра
02:54:13
и это кардинально меняет способ
02:54:15
что мы собираемся использовать нашу программу просмотра страниц
02:54:18
компонент, потому что теперь средство просмотра страниц
02:54:22
обрабатываю маршрут прямо сейчас, этот маршрут
02:54:25
имеет путь, состоящий из косой черты, которая является
02:54:29
корень нашего приложения и в отличие от
02:54:31
прежде чем мы не сможем просто передать страницу
02:54:34
вместо этого нам нужно отобразить в качестве реквизита
02:54:36
начни думать с точки зрения просто типичного
02:54:39
веб-приложения, поэтому, если мы забудем о
02:54:41
просмотреть Всего на короткую минуту, давай
02:54:44
представьте, что у нас есть веб-сайты-блоги и
02:54:47
мы хотим отобразить отдельный блог
02:54:50
хорошо опубликуйте, как мы это сделаем
02:54:51
это иметь какой-то уникальный
02:54:53
идентификатор в URL-адресе блога
02:54:58
приложение может выбрать эти данные
02:55:00
из URL-адреса он может получить
02:55:02
информацию из базы данных, а затем
02:55:04
отобразить это на веб-странице, которая
02:55:07
в основном, что нам нужно делать с нашими
02:55:10
приложение, которое нам необходимо предоставить
02:55:13
уникальный идентификатор объекта страницы
02:55:15
что мы хотим отобразить, чтобы мы могли
02:55:17
получить этот объект и затем отобразить его
02:55:19
внутри средства просмотра страниц, поэтому все данные
02:55:22
этот просмотрщик страниц будет полагаться на
02:55:25
будет поступать из URL-адреса, поэтому нам нужно
02:55:28
чтобы обозначить внутри нашего маршрута, что там
02:55:32
это какой-то уникальный идентификатор, который нам нужен
02:55:35
работать, и мы делаем это с тем, что
02:55:37
называемый параметром, параметр начинается с
02:55:41
двоеточие, а затем за ним следует какое-то
02:55:43
имя и в этом случае я позвоню
02:55:45
это индекс, потому что у нас так
02:55:47
имел в виду отдельную страницу
02:55:51
объекты, поэтому у этого маршрута теперь есть путь
02:55:54
который ожидает индекса, который мы
02:55:57
можно использовать, чтобы затем пойти и получить наши данные
02:56:00
и показать, что как бы там ни было
02:56:02
иметь побочный эффект, что я не все
02:56:03
это безумие, потому что теперь, когда ты выглядишь
02:56:07
в консоли пишет, что есть
02:56:09
не найдено совпадений для местоположения с
02:56:11
путь всего лишь косая черта, поэтому я хочу это
02:56:16
приложение будет работать так, если мы
02:56:18
не указывайте индекс, тогда он будет
02:56:21
укажите страницу по умолчанию, которая может быть
02:56:24
индекс 0 или это может быть самый низкий показатель
02:56:27
индекс опубликованной страницы, но если
02:56:31
мы предоставляем индекс, например индекс
02:56:34
one, то мы отобразим страницу с
02:56:39
этот индекс один, по крайней мере, пока он
02:56:42
опубликовано, поэтому это означает, что наш
02:56:45
Параметр индекса должен быть необязательным, и мы
02:56:48
можно сделать это очень легко, просто добавив
02:56:50
вопросительный знак в конце параметра, поэтому
02:56:52
это исправит это конкретное
02:56:54
проблема, так что теперь индекс не является обязательным
02:56:58
на самом деле является пустой строкой всякий раз, когда мы
02:57:01
иди и возьми это, так что теперь вопрос
02:57:03
как нам получить это значение этого
02:57:06
индексный параметр, давайте перейдем на нашу страницу
02:57:09
просмотрщик, потому что теперь это компонент
02:57:11
это обработка этого маршрута, которую мы не делаем
02:57:14
у страницы больше нет реквизита, так что поехали
02:57:18
вперед и просто избавьтесь от всего нашего реквизита
02:57:19
вместе и добавим созданный хук
02:57:22
поэтому на предыдущем уроке всякий раз, когда мы
02:57:24
создали наш маршрутизатор, мы добавили его в наш
02:57:28
приложение с методом использования, для которого это было
02:57:31
включая плагин к нашему приложению
02:57:33
и всякий раз, когда вы это делаете, мы получаем
02:57:37
особая собственность, к которой у нас есть доступ
02:57:39
во всех наших компонентах, называемых просто
02:57:42
маршрут это относится к маршруту, который
02:57:46
в настоящее время обрабатывается этой страницей
02:57:49
компонент просмотра, поэтому у него есть свойство
02:57:51
называемые параметрами, которые представляют собой объект, который
02:57:55
содержит все параметры, которые будут
02:57:57
определено внутри нашего пути маршрута, поэтому мы
02:58:00
есть только один, и это индекс, поэтому мы
02:58:03
действительно могу написать это в
02:58:05
консоль, чтобы мы могли видеть, что это
02:58:08
значение, и если мы просто выпишем
02:58:12
параметры, то это покажет нам
02:58:14
объект и все, что внутри него, поэтому
02:58:16
всякий раз, когда мы заходим в браузер, мы видим
02:58:18
что у нас есть индекс, но он пустой
02:58:21
строка и, конечно, мы могли бы добавить немного
02:58:24
другое значение для индекса, давайте добавим
02:58:26
индекс один, и мы увидим, что это
02:58:29
значение индекса равно единице, теперь есть
02:58:32
оговорка с этим и с этим, это не так
02:58:35
неважно, что мы включаем в качестве индекса
02:58:37
параметр это может быть строка символов
02:58:40
и индекс будет этим значением, поэтому есть
02:58:44
некоторая проверка, которую нам нужно будет сделать
02:58:46
так что давайте сделаем это для контента, давайте
02:58:51
возьмем индексный параметр и давайте просто
02:58:54
отображать это как контент, который мы, конечно,
02:58:57
необходимо использовать правильный синтаксис для вывода
02:59:00
это значение, но теперь, когда мы знаем, как это
02:59:02
будет работать, тогда мы сможем начать
02:59:06
рефакторинг нашего приложения так, чтобы
02:59:09
просмотрщик страниц может выйти и получить
02:59:11
соответствующую страницу, чтобы она могла затем
02:59:14
отобразите этот контент, и мы получим
02:59:16
начал с этого на следующем уроке в
02:59:19
На предыдущем уроке мы обсуждали, как мы
02:59:21
собираемся загрузить данные на нашу страницу
02:59:23
компонент просмотра, на который мы собираемся положиться
02:59:25
по URL-адресу, чтобы дать нам индекс
02:59:28
страница, которую мы хотим отобразить, поэтому это
02:59:30
внутри компонента просмотра страниц мы
02:59:32
просто получим эту страницу, и мы сможем
02:59:35
затем отобразите содержимое, чтобы вопрос
02:59:37
затем становится, как мы будем делать
02:59:39
это хорошо, типичный шаблон - использовать
02:59:42
централизованное хранилище данных, и в идеале мы
02:59:45
будет использовать хранилище данных, которое является реактивным

Описание:

In this comprehensive course, Jeremy McPeak will teach you the fundamental concepts you need to start building applications with Vue 3. ► Download Vue.js scripts and plugins from CodeCanyon: https://codecanyon.net/search/vue.js UI frameworks have drastically changed the way we write web applications. There are many frameworks to choose from, and picking one can be hard. In this course, you'll learn why Vue.js is a great choice, and you'll discover how to use it in detail. You'll start with building the simplest Vue components and learning to use core features like data binding, props, events, and computed properties. Then you'll build that knowledge step by step with practical projects learning how to use the Vue CLI, forms, watchers, and custom events. You'll also master key concepts like the Vue router and the Composition API. By the end of this course, you'll be confident in using Vue.js for all your front-end development projects. Here's what the course covers: 1. Introduction 00:00:00 1.1 Introduction 2. Vue.js With no Tool-Chain 00:02:31 2.1 Getting Started With Vue 00:10:51 2.2 Using Loops to Generate Content 00:17:00 2.3 Binding Data to Attributes 00:25:11 2.4 Setting Up Events 00:33:15 2.5 Binding CSS Classes I 00:41:48 2.6 Using Computed Properties 00:48:05 2.7 Binding CSS Classes II 00:55:00 2.8 Introducing Components 01:04:19 2.9 Understanding Data Flow 3. Using the Vue CLI 01:13:00 3.1 Getting Started With the Vue CLI 01:21:30 3.2 Starting a Project From Scratch 01:32:18 3.3 Applying CSS to Components 4. Working With Data 01:41:51 4.1 Using the created() Lifecycle Event to Load Data 01:48:19 4.2 Working With Unset Props 01:55:19 4.3 Deciding When to Load Data 02:01:14 4.4 Working With Forms 02:08:43 4.5 Validating Forms 02:14:39 4.6 Updating and Filtering Data 02:21:05 4.7 Using Watchers 5. Creating and Using Custom Events 02:25:19 5.1 Creating Custom Events 02:32:48 5.2 Writing a Global Event Bus 6. Using Vue Router 02:44:37 6.1 Introducing Vue Router 02:53:19 6.2 Using Route Params 02:59:18 6.3 Loading Data for Views 03:10:07 6.4 Watching Params to Reload Data 03:16:57 6.5 Using the Router's Active Class 03:23:36 6.6 Nesting Routes 7. Using the Composition API 03:30:52 7.1 Introducing the Composition API 03:40:26 7.2 Providing and Injecting Dependencies Into Components 03:48:18 7.3 Accessing Props and Router Functions 03:54:58 7.4 Binding Data and Working Wth Forms 04:06:00 7.5 Defining Computed and Watched Values 04:16:18 7.6 Implementing the Delete Functionality 8. Conclusion 04:20:42 8.1 Conclusion NOTE: Current recommendations are to use create-vue with the Vite tooling for new Vue projects. vue-cli is in maintenance mode, but still works for creating Webpack-powered Vue apps like in this course. ► Download unlimited photos, fonts, and templates with Envato Elements: https://elements.envato.com/ Read free Vue tutorials on Envato Tuts+: https://code.tutsplus.com/categories/vue - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Envato Tuts+ Discover free how-to tutorials and online courses. Design a logo, create a website, build an app, or learn a new skill: https://tutsplus.com/ Envato Elements All the creative assets you need under one subscription. Customize your project by adding unique photos, fonts, graphics, and themes. ► Download Unlimited Stock Photos, Fonts & Templates with Envato Elements: https://elements.envato.com/ ► Subscribe to Envato Tuts+ on YouTube: https://www.youtube.com/tutsplus ► Follow Envato Tuts+ on Twitter: https://twitter.com/envato ► Follow Envato on Facebook: https://www.facebook.com/unsupportedbrowser - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Готовим варианты загрузки

popular icon
Популярные
hd icon
HD видео
audio icon
Только звук
total icon
Все форматы
* — Если видео проигрывается в новой вкладке, перейдите в неё, а затем кликните по видео правой кнопкой мыши и выберите пункт "Сохранить видео как..."
** — Ссылка предназначенная для онлайн воспроизведения в специализированных плеерах

Вопросы о скачивании видео

mobile menu iconКак можно скачать видео "Vue.js Tutorial: Beginner to Front-End Developer"?mobile menu icon

  • Сайт http://unidownloader.com/ — лучший способ скачать видео или отдельно аудиодорожку, если хочется обойтись без установки программ и расширений. Расширение UDL Helper — удобная кнопка, которая органично встраивается на сайты YouTube, Instagram и OK.ru для быстрого скачивания контента.

  • Программа UDL Client (для Windows) — самое мощное решение, поддерживающее более 900 сайтов, социальных сетей и видеохостингов, а также любое качество видео, которое доступно в источнике.

  • UDL Lite — представляет собой удобный доступ к сайту с мобильного устройства. С его помощью вы можете легко скачивать видео прямо на смартфон.

mobile menu iconКакой формат видео "Vue.js Tutorial: Beginner to Front-End Developer" выбрать?mobile menu icon

  • Наилучшее качество имеют форматы FullHD (1080p), 2K (1440p), 4K (2160p) и 8K (4320p). Чем больше разрешение вашего экрана, тем выше должно быть качество видео. Однако следует учесть и другие факторы: скорость скачивания, количество свободного места, а также производительность устройства при воспроизведении.

mobile menu iconПочему компьютер зависает при загрузке видео "Vue.js Tutorial: Beginner to Front-End Developer"?mobile menu icon

  • Полностью зависать браузер/компьютер не должен! Если это произошло, просьба сообщить об этом, указав ссылку на видео. Иногда видео нельзя скачать напрямую в подходящем формате, поэтому мы добавили возможность конвертации файла в нужный формат. В отдельных случаях этот процесс может активно использовать ресурсы компьютера.

mobile menu iconКак скачать видео "Vue.js Tutorial: Beginner to Front-End Developer" на телефон?mobile menu icon

  • Вы можете скачать видео на свой смартфон с помощью сайта или pwa-приложения UDL Lite. Также есть возможность отправить ссылку на скачивание через QR-код с помощью расширения UDL Helper.

mobile menu iconКак скачать аудиодорожку (музыку) в MP3 "Vue.js Tutorial: Beginner to Front-End Developer"?mobile menu icon

  • Самый удобный способ — воспользоваться программой UDL Client, которая поддерживает конвертацию видео в формат MP3. В некоторых случаях MP3 можно скачать и через расширение UDL Helper.

mobile menu iconКак сохранить кадр из видео "Vue.js Tutorial: Beginner to Front-End Developer"?mobile menu icon

  • Эта функция доступна в расширении UDL Helper. Убедитесь, что в настройках отмечен пункт «Отображать кнопку сохранения скриншота из видео». В правом нижнем углу плеера левее иконки «Настройки» должна появиться иконка камеры, по нажатию на которую текущий кадр из видео будет сохранён на ваш компьютер в формате JPEG.

mobile menu iconСколько это всё стоит?mobile menu icon

  • Нисколько. Наши сервисы абсолютно бесплатны для всех пользователей. Здесь нет PRO подписок, нет ограничений на количество или максимальную длину скачиваемого видео.