Nuxt.js – сценарий, использующий документ, работающий во всем проекте

#javascript #vue.js #nuxt.js

#javascript #vue.js #nuxt.js

Вопрос:

для моих потребностей в настройке CSS-фреймворка я использую скрипт для кнопки onClick «эффект импульса». В настоящее время я запускаю его в mounted() части моего макета default.vue в Nuxt.js проект работает в режиме SSR.

Это сценарий:

 if (process.client) {
  var elements = document.querySelectorAll(".button");
  for (var i = 0; i < elements.length; i  ) {
    elements[i].addEventListener("click", function (event) {
      event.preventDefault;
      this.classList.remove("pulse");
      void this.offsetWidth;
      this.classList.add("pulse");
    });
  }
}
  

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

Когда я копирую и вставляю этот скрипт в часть сценария компонента, он хорошо работает в компоненте. Но я не хочу включать его в каждый компонент.

Где в моем проекте я должен добавить его, чтобы он работал во всех компонентах? Я пытался добавить его в nuxt-config, но это не сработало.

Пожалуйста, помогите.

Комментарии:

1. почему бы вам не создать пользовательскую глобальную директиву vue?

2. У меня нет никакого опыта в этом. Не могли бы вы немного помочь мне, пожалуйста?

Ответ №1:

Я бы создал плагин, который бы делал это за вас, к которому вам нужно перейти nuxt.config.js

 plugins: ['~/plugins/pulse.js']
  

Теперь вы переходите в свою папку плагинов и создаете это pulse.js и запишите в

 import Vue from 'vue'

Vue.directive('pulse', {
  inserted: (el) => {
    el.addEventListener("click", function (event) {
      event.preventDefault;
      el.classList.remove("pulse");
      void el.offsetWidth;
      el.classList.add("pulse");
    });
  }
})
  

После этого ваша директива становится глобальной, и вы можете перейти к любой кнопке, которую хотите, и просто добавить v-pulse к ней

 <button v-pulse>Click me</button>
  

Скажите мне, работает ли это и если вы получаете какие-либо ошибки.

Комментарии:

1. Звучит здорово, но что, если я не хочу устанавливать его во всех своих кнопках вручную и просто хочу прослушать событие click? Я думаю, что директива не будет работать. Я пробовал с миксином, но у меня это не работает.