Упражнение 1.3 - использование директив

Упражнение 1.3 - использование директив

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

Создайте приложение и пустой компонент как показано в упражнении.

В пустом компоненте напишите такой код:

<template>
  <div>
    <h1>{{ text }}</h1>
  </div>
</template>
<script setup>
  const text = 'Directive text';
</script>

Замените интерполяцию {{}} атрибутом v-text. Вывод не должен поменяться:

<template>
  <div>
    <h1 v-text="text">Loading...</h1>
  </div>
</template>

Добавьте директиву v-once к элементу h1. Это заставит этот элемент DOM загружать только
данные v-text один раз:

<template>
  <div>
    <h1 v-once v-text="text">Loading...</h1>
  </div>
</template>

Под элементом h1 добавьте новый элемент h2, использующий атрибут v-html. Также необходимо добавить
новые локальные данные с именем html, которые содержат строку с форматированием HTML, как показано на
следующий блок кода:

<template>
  <div>
    <h1 v-once v-text="text">Loading...</h1>
    <h2 v-html="html" />
    </div>
</template>
<script setup>
  const text = 'Directive text';
  const html = 'Stylise</br>HTML in<br/><b>your data</b>'
</script>

Сохраните файл, и импортируйте его в App.js, чтобы он отобразился на экране. В результате, в h2 элемент загрузится html разметка.

Добавьте новый объект локальной ссылки, который содержит много информации, такой как URL, target, title,
и tabindex. Внутри шаблона добавьте новый HTML-элемент привязки и привяжите объект ссылки к элементу HTML, используя короткий синтаксис v-bind, например, :href="link.url":

<template>
  <div>
    <h1 v-once v-text="text">Loading...</h1>
    <h2 v-html="html" />
    <a
      :href="link.url"
      :target="link.target"
      :tabindex="link.tabindex">
      {{ link.title }}
    </a>
  </div>
</template>
<script setup>
  const text = 'Directive text';
  const html = 'Stylise</br>HTML in<br/><b>your data</b>'
  const link = {
    title: "Go to Google",
    url: https://google.com,
    tabindex: 1,
    target: '_blank',
  };
</script>

В результате, на основе параметров ссылки, она должна будет построится, в настоящий html элемент, с указанными параметрами.

Примените v-if="false" к элементу h1, v-else-if="false" к элементу h2 и v-else к тегу ссылки:

<template>
  <div>
    <h1 v-if="false" v-once v-text="text">Loading...</h1>
    <h2 v-html="html" v-else-if="false" />
    <a
      v-else
      :href="link.url"
      :target="link.target"
      :tabindex="link.tabindex">
      {{ link.title }}
    </a>
</div>
</template>

Вы должны видеть только тег <a> на странице, так как мы установили в условные операторы заголовков false.
Условие v-else отобразит ссылку.

Измените шаблон, чтобы использовать v-show вместо операторов v-if, удалите v-else из
<a> и измените значение v-show в h1 на true:

<template>
  <div>
    <h1 v-show="true" v-once v-text="text">Loading...</h1>
    <h2 v-html="html" v-show="false" />
    <a
      :href="link.url"
      :target="link.target"
      :tabindex="link.tabindex">
      {{ link.title }}
    </a>
  </div>
</template>

В данном случае отобразится только заголовок h1 и ссылка.

Если вы откроете инструменты разработчика браузера, то увидите, что h2 был создан, и есть в коде, но стиль у него - display:none;

В этом упражнении мы узнали об основных директивах Vue для управления, привязки,
отображения и скрытия HTML  элементов шаблона, без использования JavaScript.

В следующей статье, мы узнаем, как добиться двусторонней привязки с помощью с помощью v-model Vue.