Автор оригинала: Adam McQuistan.
Навигация по Vue маршрутизатору
Добро пожаловать на второе сообщение по использованию vue.js и flask для полноценного веб-разработки. Основная тема в этой статье будет на маршрутизаторе Vue, но я также буду покрывать директиву V-модели, а также методы Vuue и вычисленные свойства. То, что говорится, возьмите что-нибудь кофеиное и потреблять некоторую доброту. Код для этого поста на мой github Отказ
Содержание серии
- Настройка и узнать Vuejs
- Навигация Vue Router (Вы здесь)
- Государственное управление с Vuex
- RESTFLAY API с колбой
- Интеграция AJAX с API для отдыха
- JWT аутентификация
- Развертывание на виртуальный частный сервер
Как знакомиться с Vue Router
Как и большинство других аспектов Framework Vue.js, используя Vue Router Для навигации на различных страницах и последующих компонентах мягко проще.
В сторону 1 – отдельные экземпляры Vue и Vue-маршрутизатора
Некоторые из тем, представленных в этом посте, будут лучше всего описаны с небольшими примерами игрушек, поэтому будут времена, когда я вырвался в сторону, чтобы сделать это. В стороне в сторону я продемонстрирую то, что требуется, чтобы упасть в отдельный экземпляр Vue и маршрутизатор. В то время как Vue абсолютно феноменал для строительства полноценных спа-приложений, существует также реальная ценность в способности бросить его на обычную HTML-страницу.
Cartoon characters
{{ character.name }}
Это показывает персонажи мультфильма Scooby и Shaggy. Пример вводит V-bind:
Директива на динамически связывать данные из персонажи
Массив на SRC
и Alt
атрибуты IMG
элемент, включающий данные для привода контента. Это похоже на то, как выполняется текстовое интерполяция с использованием {{}}
, кроме V-bind
Интерполируйте данные в атрибуты. Вы можете найти рабочий пример этого здесь Отказ
Вместо того, чтобы отображать оба символа, давайте изменим наш подход, позволяя нам щелкнуть ссылку для каждого символа для отображения определенного «Scooby» или «Shaggy» компонента. Для достижения этого я вытащите в библиотеку Vue-Router и внесите следующие изменения:
Scooby Shaggy
Как вы можете сказать, эта реализация приводится в действие жесткокодированными компонентами, что не является полезным изменением от точки зрения повторного использования. Тем не менее, он показывает простое в следующем использовании Vue-маршрутизатора. Помимо источника библиотеки Vue-маршрутизатора HTML содержит два новых элемента, компоненты фактически, специфичные для Vue-маршрутизатора.
Первый компонент Vue-маршрутизатора – <Маршрутизатор-ссылка>
который является компонентом, который получает путь маршрута через к
Атрибут, который на самом деле называется «параметром» в Vue компонента. <Маршрутизатор-ссылка>
Компонент создает элемент гиперссылки, который отвечает на события, и сообщает Vue для отображения компонента, связанного со своим к
Параметр, либо «/Scooby», либо «/Shaggy».
Ниже <Маршрутизатор-ссылка>
это еще один новый компонент, <Просмотр маршрутизатора>
Предполагается, что Vue-Router сообщает Vue, чтобы ввести компоненты пользовательского интерфейса, Scooby и Shaggy. Компоненты шаблона Scooby и Shaggy Custom определяются в Сценарий
элемент в нижней части этого примера page index.html.
Далее объект Vue-маршрутизатора создается с помощью маршруты
Объект, который определяет массив маршрутов, подобных тому, что мы видели в приложении к опросу первой статьи. Здесь дорожки маршрута сопоставлены на состав Scooby и Shaggy. Последнее, что нужно сделать, это создает экземпляр Vue, придайте ему объект маршрутизатора в качестве свойства объекта его параметров и привязать экземпляр к приложению Div
Отказ
Вы можете нажать на Scooby или Shaggy Router-Link, чтобы отобразить их, как показано ниже. Код для этого примера можно найти здесь Отказ
Использование Vue-маршрутизатора, чтобы показать отдельный опрос
Вернуться в приложение для опроса, давайте начнем нашу дискуссию, посмотрев на файл маршрутов/index.js.
import Vue from 'vue' import Router from 'vue-router' import Home from '@/components/Home' Vue.use(Router) export default new Router({ routes: [ { path: '/', name: 'Home', component: Home } ] })
Домашняя страница отображает опросы приложения, когда запрошен корневой URL-адрес на localhost: 8080 Потому что это сопоставлено на Главная
Компонент через маршруты маршрутизатора.
Мне также нужно подключить к Vue через Vue.use (маршрутизатор)
Функция для модульного SPA-приложения, такого как этот. Кроме того, мне нужно включить маршрутизатор в объекте параметров, который подается в экземпляр Vue в Main.js, аналогично примеру Scooby/Shaggy Toy.
Продолжая с приложением опроса, я добавляю новый маршрут к маршруты
Объект, который будет сопоставлять каждый опрос и его вопросы к многоразонному опросу. В маршрутах/index.js файл импортирует a Опрос
Компонент, а затем добавьте маршрут на карту каждого опроса по его идентификатору на Опрос
составная часть.
// ... omitted for brevity import Survey from '@/components/Survey' // ... omitted for brevity export default new Router({ routes: [ { // ... omitted for brevity }, { path: '/surveys/:id', name: 'Survey', component: Survey } ] })
Обратите внимание на : id
часть нового пути /revys/: id
Отказ Это известно как динамический сегмент, который вы можете думать как переменную на пути маршрута. В этом случае я говорю, что : id
будет использоваться для определения конкретного опроса для отображения в Опрос
Компонент будет построен рядом.
В каталоге «SRC/Componts/» создайте файл под названием Survey.Vue, затем откройте его и добавьте стандартный шаблон, скрипт и секции стилей, а также код, показанный ниже:
I'm a Survey Component
Сохранение всех файлов, и я запускаю Dev Server с NPM запустить dev
Затем введите следующий URL в браузере: localhost: 8080/#/revys/23 Отказ В консоли инструментов Dev My Browser я вижу изображение ниже.
Так что только что произошло?
В Шаблон
Раздел I добавил какой-то чепутный код, чтобы он понял, что компонент обследования обслуживается маршрутизатором. В Сценарий
Раздел I инициализировал объект опроса, который будет проводить данные обследования в конце концов. В Beforemount
Жизненный крючок что-то довольно крутое происходит. В этой функции я получаю доступ к маршруту текущего окна и последующим : id
Параметр, определенный в Маршрут
модуль.
Эта последняя часть возможна, потому что Опрос
VUE объект компонента имеет ссылку на экземпляр VUE-маршрутизатора, дающий доступ к маршруту, позволяющему мне получить доступ к этому с помощью Это $ manager.params.id
Отказ Маршрут может иметь несколько динамических сегментов, и все доступны в соответствующих компонентах через Пармы
член Это. $ маршрут
объект.
Далее я определим функцию Mock Ajax в API/index.js, который я звоню из Опрос
Компонент Beforemount
крючок, чтобы получить обследование : id
Отказ В API/index.js Добавьте следующую функцию:
const surveys = [{ id: 1, name: 'Dogs', // ... omitted for brevity }, { id: 2, name: 'Cars', // ... omitted for brevity }] // ... omitted for brevity export function fetchSurvey (surveyId) { return new Promise((resolve, reject) => { setTimeout(() => { const survey = surveys.find(survey => survey.id === surveyId) if (survey) { resolve(survey) } else { reject(Error('Survey does not exist')) } }, 300) }) }
Теперь вернемся в Опрос
Компонент мне нужно импортировать Fetchsurvey
и использовать его в Beforemount
Чтобы получить запрошенный опрос. Опять же для визуальных целей, я выводят название опроса в шаблоне как заголовок героя Булма.
{{ survey.name }}
Обновление URL-адреса браузера в Localhost: 8080/опросы/2, я вижу, что показано ниже:
Довольно круто верно?
Далее я хотел бы сделать что-то немного более полезное с моим Опрос
Компонент и включает вопросы и выбор.
omitted survey name header for brevity{{ question.text }}
Опять же, сохранение и освежающий браузер с помощью URL Localhost: 8080/#/Surveys/2 теперь дает список вопросов и доступных вариантов опроса автомобилей.
Позвольте мне попытаться распаковать некоторые новые функции Vue, которые используются. Мы уже знакомы с использованием V-для
Директива по управлению генерацией вопросов и выборов и вариантов опроса, поэтому, надеюсь, вы сможете отслеживать, как их отображаются. Однако, если вы сосредоточены на том, как генерируются радиопередачи для вариантов вариантов вопроса, вы заметите, что я делаю два новых или немного разных, вещей.
Для радио ввода я использовал V-модель
Директива и поставила его со значением Вопрос. Коайце
Отказ Что это делает, это создает новый член на Вопрос:| Объект под названием «Выбор» и регистрирует его с помощью радио входных данных, позволяющих поступать от фактического радио ввода в
Вопрос. Коайце объектная собственность. Я также использую краткий синтаксис
: значение вместо
V-bind: значение Для привязки значения этого радио вклада к значению вариантов вопросов, которые игреты через
V-для Отказ
В сторону 2 – использование директивы V-модели
Я понимаю, что V-модель
Концепция, вероятно, немного нечеткая, поэтому отпусти меня в сторону и сделайте еще один простой пример, чтобы продемонстрировать точку. Рассмотрим тривиальный пример ниже. Опять же, вы можете увидеть рабочий пример этого кода здесь Отказ
Hello {{ textInput }}Which do you like better?
So you like {{ favoriteFruit }}
Первый вход – это текстовый вход, спрашивающий имя пользователя. Этот текстовый ввод имеет V-модель
зарегистрировано для него с свойством данных TextInput
Прилагается к нему, что сохраняет вход текста в синхронизации с TextInput
Свойство данных Vue
пример. Войдите секунду, чтобы ввести свое имя в ввод текста и просмотреть его обновление в Привет {{textinput}}
Выход HTML.
Удивительно верно?
Второй вход – это радио вход с именем «Фрукты», которые отображают фрукты «Яблоки» и «Апельсины» и просит пользователю выбрать их избранное. Радиовход зарегистрирован в Foodsfruit
Свойство данных Vue
экземпляр через V-модель
, который связывает значение, связанное с каждым радовым входом через : значение = "выбор"
Синтаксис связывания атрибута для хранения Foodsfruit
В синхронизации с выбранным радио входом. Опять же, вы можете посмотреть значение Foodsfruit
Обновление в
Выход элемента. Так что вам нравится {{FoodingFruit}}
Ниже я показываю какой-то пример вывода. Я призываю вас играть с этим примером до тех пор, пока понятие V-модель
чисто.
Завершение опроса
ОК, вернемся к приложению опроса. Подумайте о том случае, когда опрос имеет много вопросов, отображаемых под высотой экрана по умолчанию. Вообще, мы хотим, чтобы люди могли прокрутить вниз, чтобы увидеть ваш самый важный контент. Лучшим выбором было бы страгать от вопросов, отображающих один вопрос, и его ответы, одновременно.
Обновлено Опрос
Компонент выполняет это ниже.
omitted for brevity v-bind:key="question.id" v-show="currentQuestion === idx"> new v-show directivenew pagination buttons<h4 class='title'>{{ idx }}) {{ question.text }}</h4>{{ question.text }}
new submit button
Эти изменения работают вместе, чтобы завершить опыт использования опросов. Поскольку узлы вопросов генерируются из v-for = "(вопрос, IDX) в опросе. Вопросы. Вопросы"
Я использую v-show = "aTequestion"
Директива для проверки, если значение свойства данных, aTeququestion
соответствует ценности IDX
Отказ Это делает вопрос Div
Видимый только если aTeququestion
равно этому вопросу IDX
значение. Поскольку значение CurrectQuestion
Инициализируется до нуля, Zeroth Reside будет отображаться по умолчанию.
Под вопросами и ответами кнопки Pagination позволяют пользователю запугивать по вопросам. «Следующий» элемент кнопки имеет @ Нажмите = "gotonextquestion"
Внутри этого, который является Vue Click Deanler событий, который отвечает, вызывая gotonextquestion
Функция внутри нового Методы
Vue объект свойство. Vuue Component Object’s Методы
Раздел – это то, где функции могут быть определены для выполнения ряда вещей, чаще всего для изменения состояния компонента. Здесь gotonextquestion
Приращение aTeququestion
Одним из них, продвигая отображаемый вопрос, или он сбрасывает его на первый вопрос. Кнопка назад и связанные с ней GotoPreviousQuestion
метод делает точное противоположность.
Последнее изменение – это функциональность для представления ответа на опрос. Кнопка использует V-шоу
Опять же, чтобы определить, следует ли отобразить кнопку на основе значения вычисленного свойства под названием ОСОБЕННОЕ ОБЕСПЕЧЕНИЕ
Отказ Вычисленные свойства являются еще одной удивительной чертой Vue. Они являются свойствами, которые обычно контролируют, как отображаются компоненты пользовательского интерфейса, которые пригодны, когда логика немного сложнее, чем проверка одного значения свойства данных. Таким образом, код шаблона чистый и способный сосредоточиться на презентации, когда логика остается в коде JavaScript.
Click Event Sisiver, @ Нажмите = "handlesubmit"
, зарегистрирован на кнопке «Отправить анкер», которая вызывает Handlesubmit
метод. Этот метод вызывает функцию Mock Ajax Savesurveyresponse
, который возвращает обещание и проходит контроль на «тогда цепь». «Тогда цепь» имеет обратный вызов, .then (() -> Это. $ Router.push ('/'))
, который вызывает объект маршрутизатора компонента и программно направляет приложение обратно в корневой путь, отображающий Главная
составная часть.
В API/index.js добавьте Savesurveyresponse
функционировать в нижней части файла. Эта функция получает объект отклика обследования и просто консольные журналы «Сохранение ответа обследования …», пока я не подключу передний API в будущем.
export function saveSurveyResponse (surveyResponse) { return new Promise((resolve, reject) => { setTimeout(() => { console.log("saving survey response...") }) resolve() }, 300) }) }
Сохранение всех файлов и обновления браузера с URL localhost: 8080:/#/revys/2 Я вижу, что ниже. Я рекомендую нажать в приложение и убедиться, что вы можете логически проследить поток управления через Опрос
составная часть.
Кроме 3 – программное маршрутизация
Аналогично, прежде чем я хочу продемонстрировать несколько вещей, которые просто обсуждались с вариантом одного из предыдущих примеров игрушек. Ниже я изменил пример навигации, который отображает Scooby или Shaggy, чтобы больше не использовать <Маршрутизатор-ссылка>
составная часть.
Пример ведет себя точно так же, как и раньше, но теперь маршрутизация осуществляется через комбинации прослушивателей Click Event, методы Vuue, и вручную звоните Это. $ Router.push ('/путь')
Отказ Это на самом деле, что <Маршрутизатор-ссылка>
делает за кулисами, используя к = "/путь"
значение. Я призываю вас играть с этим живым примером здесь Отказ
Добавление маршрутизатора ссылки на домашний компонент
Последнее, что связано с Опрос
Компонент предоставляет возможность перейти к опросу от Главная
составная часть. Как показано ранее с примером Scooby и Shaggy, Vue-Router делает это невероятно простым с <Маршрутизатор-ссылка>
Отказ
Вернуться в Главная
Компонент делает следующую модификацию:
{{ survey.name}}
{{survey.created_at.toDateString()}}
Take Survey
Я добавил <Маршрутизатор-ссылка>
Компонент внутри карт Bulma Footer и динамически сконструировал путь к каждому опросу. Это отличается от литеральных строковых путей, которые я предусматривал в моем предыдущем примере. Чтобы динамически создавать пути с использованием строк шаблона JavaScript и идентификаторы обследования, которые требуются по сравнению с префиксом к
Параметр с толстой кишкой («:»), который является сокращением для V-bind
Директива.
Я сохраняю все файлы и подтянув корневой URL-путь, localhost: 8080 в моем браузере, чтобы убедиться, что он работает. Вы должны быть в состоянии щелкнуть на каждом опросе «Возьмите« Обзор »ссылки и отображаться Опрос
Компонент Ui.
Чтобы завершить опыт, я добавляю простую навигацию с помощью вкладки «Главная», используя <Маршрутизатор-ссылка>
и а к
Параметр, указывающий на корневой путь к приложению в новом файле компонента с именем Header.Vue в каталоге компонента.
Чтобы гарантировать, что он включен в каждую страницу приложения, я помещу его в компонент App.Vue. Для этого я впервые импортирую Заголовок
Компонент как Appheader
В Сценарий
Раздел Затем зарегистрируйте его, добавив свойство под названием Компоненты
в Vue объекте компонента приложения и установить его равным объекту, содержащему Appheader
составная часть.
Затем я добавляю компонент в шаблоне размещения <Заголовок App-Header>
прямо над <Просмотр маршрутизатора>
составная часть. При именовании компонентов часто используется Pascal Case Согласив слова, описывающие его вместе, где первая буква каждого слова капитана. Затем я включаю его в шаблон во всех нижнем регистре с дефисами между каждым словом, который начался с заглавной буквы.
Сохранение файлов и обновления браузера, я теперь вижу Заголовок
Компонент, содержащий панель NAV на каждой странице приложения.
Ресурсы
Хотите узнать больше о Vue.js и строить веб-приложения для интерфейса? Попробуйте проверить некоторые из следующих ресурсов для более глубокого погружения в эту внешнюю структуру:
Заключение
Если вы все еще читаете это, вы потребляли довольно много VUE GOOGE. Мы, безусловно, охватываем много материалов в этом посте, и если вы новичок в Vue или одно файловые компоненты, которые, вероятно, стоит второго чтения и поездки на превосходное Vue Docs для более глубокого погружения.
Как всегда, спасибо за чтение и не стесняйтесь прокомментировать или критиковать ниже.