javascript - 为什么多次使用相同的 vue 指令会在所有指令上调用更新?

标签 javascript vuejs2

我创建了一个 vue 指令,我将其附加到同一页面上的多个输入元素,并且注意到当我开始输入其中一个元素时,页面中的所有元素都会触发“更新”事件。对于我更新的特定元素,我原以为只有一个事件。

我的问题是,有没有办法阻止事件触发或过滤事件,以便我可以只处理正在更改的输入?

这是我的指令和 View 的代码:

Vue.directive('test', {
  bind: (el) => {
    console.log(el.id + " bound")
  },
  update: (el) => {
    console.log(el.id + " updated")
  }
})

new Vue({
  el: "#app",
  data: {
    testval1: null,
    testval2: null,
  },
  methods: {
  }
})

和模板:

<div id="app">
  <input id="testinput1" v-model="testval1" v-test />
  <input id="testinput2" v-model="testval2" v-test />
</div>

这是问题的 JSFiddle:https://jsfiddle.net/eywraw8t/415288/

在此 JSFiddle 中,您可以在控制台中看到,如果您在输入字段中键入内容,它会触发两个输入字段的更新。

最佳答案

我认为最好的方法是使用绑定(bind)。您的指令将有一个指令适用于指定 v-test 指令的每个元素。这是解决您问题的简单方法

Vue.directive('test', {


  bind: (el) => {
    console.log(el.id + " bound")
    const handler = (e) => {
        console.log('e', e.target)
      if (el == e.target) {
        console.log(el.id + " firing")
      }
    }
    el.vueTest = handler
    // add Event Listeners
    document.addEventListener('input', handler)
  },
  unbind (el, binding) {
    // Remove Event Listeners
    document.removeEventListener('input', el.vueTest);
    el.vueTest = null;
  }
})

希望这对你有帮助:)

关于javascript - 为什么多次使用相同的 vue 指令会在所有指令上调用更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52771602/

相关文章:

javascript - Vue.js <select> v-model 未在组件内绑定(bind)

vue.js - Vuejs 'beforeunload' 事件未按预期触发

javascript - 如果 id 以偶数结尾,则使用 jquery 将类应用于具有特定 id 的每个 div

javascript - 在特定时间从数据库播放音频

javascript - 模态弹出窗口和父框架

javascript - 使用 vue.js 将 `id` 绑定(bind)到 img src url

javascript - v-on :click and event triggering on inner elements

vue.js - 计算属性不更新 Prop 更改

javascript - 在 javascript 中为数组创建函数。

javascript - 如何使用动态 ID 在 HTML 下拉列表中获取选定的文本