Приведи пример использования кастомной директивы

Ответ

Кастомные директивы в Vue позволяют добавлять пользовательскую логику к DOM-элементам. Например, создадим директиву v-focus, которая автоматически фокусирует элемент при монтировании:

// Регистрация глобальной директивы
app.directive('focus', {
  mounted(el) {
    el.focus();
  }
});

Использование в шаблоне:

<input v-focus placeholder="Автофокус">

Другой пример — директивы с аргументами:

app.directive('color', {
  mounted(el, binding) {
    el.style.color = binding.value;
  }
});
<p v-color="'red'">Текст станет красным</p>

Кастомные директивы полезны для:

  • Работы с нативным DOM
  • Интеграции сторонних библиотек
  • Повторяющихся действий с элементами

Ответ 18+ 🔞

А, ну вот, блядь, кастомные директивы в Vue! Это ж как раз та самая штука, когда тебе нужно навесить на элемент какую-то свою, ебучую логику, прям в DOM лезть. Не через компоненты, а вот так, на прямую, чтоб всё по-взрослому, с нативным апишником.

Смотри, вот тебе пример, проще говоря. Допустим, тебе надо, чтобы инпут сам фокусился, как только появится. Ну, чтобы юзеру не тыкать, ленивая жопа. Вот как это делается, ёпта:

// Регистрируем директиву на всю твою аппу, глобально, блядь
app.directive('focus', {
  mounted(el) {
    el.focus(); // И всё, пиздец! Фокус тут как тут.
  }
});

А в шаблоне потом просто пишешь, как будто так и надо:

<input v-focus placeholder="Смотри-ка, я уже готов печатать!">

Во, блядь, удобно же? А то вечно через ref и в onMounted пиздюкаться.

А вот ещё прикол, с аргументами. Допустим, ты хочешь, чтобы цвет текста менялся по твоей указке. Ну, не через классы, а чтоб прям директивой, для пафоса.

app.directive('color', {
  mounted(el, binding) {
    el.style.color = binding.value; // binding.value — это то, что ты туда передал, ёпта!
  }
});

И юзаешь:

<p v-color="'red'">Вот этот текст, сука, красный как мак!</p>

Вот зачем это всё, спрашиваешь? Да по разным, блядь, причинам!

  • Работа с нативным DOM — когда Vue-шные абстракции — это пиздец, а надо копаться в element.style или element.addEventListener. Директива — твой легальный способ туда влезть.
  • Интеграция сторонних библиотек — которые тоже любят, чтобы им DOM-элемент скормили. Типа какой-нибудь старой jQuery-хуйни, которая хочет $(el).datepicker(). Завернул в директиву — и порядок, не палишься.
  • Повторяющиеся действия — ну, типа того же фокуса или кликов снаружи. Чтобы не копипастить один и тот же код в каждом компоненте, выносишь в директиву и спишь спокойно.

Короче, инструмент, блядь, мощный. Не злоупотребляй, конечно, а то опять начнёшь jQuery в проекте 2024 года использовать, пидарас шерстяной. Но где надо — в самый раз, ёпта.