Подробное объяснение функции Vue3 app.directive()


Vue3 全局 APIГлобальный API Vue3

app.directive()— это очень мощная функция, которая позволяет разработчикам определять пользовательские глобальные директивы.

Директивы — это специальная возможность, предоставляемая Vue, используемая для непосредственного управления DOM-элементами. Используяapp.directive(), вы можете определять собственные директивы и использовать их во всём приложении.


1. Что такое директива?

Директивы — это специальные атрибуты в Vue, которые начинаются сv-. В Vue есть несколько встроенных часто используемых директив, таких какv-if、v-for、v-bindи т. д. Эти директивы помогают удобнее управлять DOM-элементами.

Например,v-ifдиректива может определять, отображать ли элемент, на основе значения выражения:

Пример

<div v-if="isVisible">отображаемое содержимое</div>

КогдаisVisibleявляетсяtrueкогдаdivэлемент будет отображён; в противном случае,divэлемент не будет отображён.


2. Пользовательские директивы

Помимо встроенных директив, Vue также позволяет нам определять собственные директивы. Пользовательские директивы можно использовать для обработки специфических операций с DOM, таких как автофокус, прослушивание прокрутки и т. д.

В Vue3 мы можем использоватьapp.directive()функцию для регистрации глобальной директивы.


3. Основы использования app.directive()

app.directive()Функция принимает два параметра:

  • Имя директивы:Определите имя директивы. Обратите внимание, что оно не должно включатьv-префикс.
  • Объект директивы:Объект, содержащий функции-хуки директивы, используемый для определения поведения директивы.

3.1 Регистрация простой директивы

Предположим, нам нужно определить директиву, которая автоматически устанавливает фокус на элемент, когда он вставляется в DOM. Мы можем реализовать это так:

Пример

import { createApp } from 'vue';

const app = createApp({});

app.directive('focus', {
  mounted(el) {
    el.focus();
  }
});

app.mount('#app');

В этом примере мы определяем директиву с именемfocusdirective. Когда элемент вставляется в DOM,mountedфункция хука будет вызвана, иel.focus()заставит элемент автоматически получить фокус.

3.2 Использование пользовательских директив

При использовании пользовательской директивы в шаблоне необходимо добавитьv-префикс:

Пример

<input v-focus />

Когда страница загружается,inputэлемент автоматически получит фокус.


4. Функции-хуки директив

Пользовательские директивы могут содержать несколько функций-хуков для выполнения определённых операций на разных этапах жизненного цикла. К распространённым функциям-хукам относятся:

  • mounted: вызывается, когда элемент директивы вставляется в DOM.
  • updated: вызывается, когда обновляется компонент, к которому привязана директива.
  • unmounted: вызывается, когда элемент директивы удаляется из DOM.

4.1 Пример: прослушивание событий прокрутки

Предположим, нам нужно выполнить некоторые операции, когда пользователь прокручивает страницу. Мы можем определитьscrollдирективу:

Пример

app.directive('scroll', {
  mounted(el, binding) {
    const handler = binding.value;
    el.addEventListener('scroll', handler);
  },
  unmounted(el, binding) {
    const handler = binding.value;
    el.removeEventListener('scroll', handler);
  }
});

В этом примере,mountedфункция хука используется для добавления слушателя события прокрутки, аunmountedфункция хука используется для удаления слушателя.

4.2 Использование директивы Scroll

Пример

<div v-scroll="onScroll" style="height: 200px; overflow-y: scroll;">
<p>Scroll content...</p>
</div>

ОпределитеonScrollметод в компоненте:

Пример

methods: {
  onScroll(событие) {
    console.log('User is scrolling', event);
  }
}

Когда пользователь прокручиваетdivэлемент,onScrollметод будет вызван.


5. Параметры и модификаторы директив

Пользовательские директивы могут принимать параметры и модификаторы. Параметры — это часть после двоеточия в имени директивы, а модификаторы — часть после точки в имени директивы.

5.1 Пример: использование параметров и модификаторов

Предположим, нам нужно определитьcolorдирективу, которая устанавливает цвет фона элемента на основе параметра:

Пример

app.directive('color', {
  mounted(el, binding) {
    const color = binding.arg || 'red';
    const modifiers = binding.modifiers;
    if (modifiers.bold) {
      el.style.fontWeight = 'bold';
    }
    el.style.backgroundColor = color;
  }
});

Используйте это в шаблоне:

Пример

<div v-color:blue.bold>Цвет фона синий, шрифт жирный</div>

В этом примере,blue— это параметр директивы, аbold— это модификатор.


Vue3 全局 APIГлобальный API Vue3

Другие расширения