Vue.js 以编程方式向DOM元素添加v-on指令

Vue.js 以编程方式向DOM元素添加v-on指令,vue.js,vuejs2,Vue.js,Vuejs2,以及一个函数,例如,在组件的hookmounted()中,该函数将click的v-on指令添加到每个组件中 你能帮我吗 谢谢。您可以尝试以下方式: <span>Tag 1</span> <span>Tag 2</span> <span>Tag 3</span> 导出默认值{ 数据(){ 返回{ 标签:['标签1'、'标签2'、'标签3'] } }, 方法:{ showModal(标签){ log(“显示标记的模式:”,标

以及一个函数,例如,在组件的hook
mounted()
中,该函数将
click
的v-on指令添加到每个组件中

你能帮我吗


谢谢。

您可以尝试以下方式:

<span>Tag 1</span>
<span>Tag 2</span>
<span>Tag 3</span>

导出默认值{
数据(){
返回{
标签:['标签1'、'标签2'、'标签3']
}
},
方法:{
showModal(标签){
log(“显示标记的模式:”,标记)
}
}
}

希望这有帮助

您可以尝试以下方法:

<span>Tag 1</span>
<span>Tag 2</span>
<span>Tag 3</span>

导出默认值{
数据(){
返回{
标签:['标签1'、'标签2'、'标签3']
}
},
方法:{
showModal(标签){
log(“显示标记的模式:”,标记)
}
}
}

希望这有帮助

您可以添加一个在单击时调用的方法,该方法读取元素的HTML内容

模板:

<template>
    <span v-for="tag in tags" @click="showModal(tag)" v-text="tag"></span>
</template>

<script>
    export default {
        data() {
            return {
                tags: ['Tag 1', 'Tag 2', 'Tag 3']
            }
        },
        methods: {
            showModal(tag) {
                console.log("Showing modal for tag:", tag)
            }
        }
    }
</script>

您可以添加一个在单击时调用的方法,该方法读取元素的HTML内容

模板:

<template>
    <span v-for="tag in tags" @click="showModal(tag)" v-text="tag"></span>
</template>

<script>
    export default {
        data() {
            return {
                tags: ['Tag 1', 'Tag 2', 'Tag 3']
            }
        },
        methods: {
            showModal(tag) {
                console.log("Showing modal for tag:", tag)
            }
        }
    }
</script>

您可以设置一个方法,以便在单击标记时调用,并传递单击的标记的id以进行适当的处理

假设您有一个标记文本数组:

doStuff(e) {
  this.showModal = e.target.innerHTML
}
然后在HTML部分:

data: function() {
  return {
    tagTotal: ['Tag 1', 'Tag 2', 'Tag 3'];
  }
}

您可以设置一个方法,以便在单击标记时调用,并传递单击的标记的id以进行适当的处理

假设您有一个标记文本数组:

doStuff(e) {
  this.showModal = e.target.innerHTML
}
然后在HTML部分:

data: function() {
  return {
    tagTotal: ['Tag 1', 'Tag 2', 'Tag 3'];
  }
}

如果直接处理Dom元素,将是一个选项

Vue.config.productionTip=false
让vMyDirective={}
vMyDirective.install=函数安装(_Vue){
_Vue.指令(“我的指令”{
插入:函数(el、绑定、vnode){
el.addEventListener('单击',()=>{
_set(vnode.context、binding.value.model、el.innerHTML)
},错)
}
})
}
Vue.use(vMyDirective)
新Vue({
el:“#应用程序”,
数据(){
返回{
testValues:['label a'、'label b'],
showModal:“没什么!!!”
}
}
})

showmodel:{{showmodel}}

测试:{{item}


如果直接处理Dom元素,将是一个选项

Vue.config.productionTip=false
让vMyDirective={}
vMyDirective.install=函数安装(_Vue){
_Vue.指令(“我的指令”{
插入:函数(el、绑定、vnode){
el.addEventListener('单击',()=>{
_set(vnode.context、binding.value.model、el.innerHTML)
},错)
}
})
}
Vue.use(vMyDirective)
新Vue({
el:“#应用程序”,
数据(){
返回{
testValues:['label a'、'label b'],
showModal:“没什么!!!”
}
}
})

showmodel:{{showmodel}}

测试:{{item}


为了保存代码,我终于用vanilla js手动添加了监听器:

mounted: {
  methodToCall: function(tag) {
    showModal = tag;
    // or 'this.showModal = tag' if showModal is a part of the componenet.
  }
}
重要的是不要对装载的
使用箭头函数,否则它将不会为
绑定vue实例


感谢您的回答。

为了保存代码,我终于用vanilla js手动添加了侦听器:

mounted: {
  methodToCall: function(tag) {
    showModal = tag;
    // or 'this.showModal = tag' if showModal is a part of the componenet.
  }
}
重要的是不要对装载的
使用箭头函数,否则它将不会为
绑定vue实例


谢谢您的回答。

谢谢@mtflud!然而,对我来说,HTML的存在是至关重要的。正是在我的问题中,我说我可以用v-for和其他地方的数据来做。我需要HTML来保存内容。不过,你的回答可能会帮助那些想在没有我约束的情况下做同样事情的人。对不起,我误解了你的问题。我真的想不出比@dr_barto的回答更干净的方法来保存HTML标签了。谢谢@mtflud!然而,对我来说,HTML的存在是至关重要的。正是在我的问题中,我说我可以用v-for和其他地方的数据来做。我需要HTML来保存内容。不过,你的回答可能会帮助那些想在没有我约束的情况下做同样事情的人。对不起,我误解了你的问题。我真的想不出比@dr_barto的回答更干净的方法来保存HTML标签了。是的,实际上这是我已经做过的下一件事,你太快了!然而,我实际上谈论的是36个元素(在我的原始代码中)。。。我想如果我想将数据保存在HTML中,我没有其他选择:(在Vue中,我想不出更简洁的方法来实现这一点;如果您使用原始JS,您当然可以使用DOM API以编程方式将
单击
事件处理程序附加到每个
span
,但我会避免这种情况。保留每个HTML标记的原因是什么?我想这与索引有关?如果是,添加标记使用JS无法做到这一点,您需要从后端添加它们。我的示例仅出于问题的目的而简化了很多,但标题总结了这个问题,尝试将其改写为:“我是否可以强制而不是声明性地向组件模板内的DOM元素添加vue v-on指令?”我知道这违背了Vue的声明性本质(应该是这样!),但我想知道这是否可行。是的,实际上这是我已经做过的下一件事,你很快!但是我实际上在谈论36个元素(在我的原始代码中)…我想如果我想在HTML中包含数据,我没有其他选择:(在Vue中,我想不出更简洁的方法来实现这一点;如果您要回到原始JS,当然可以使用DOM API以编程方式将
单击
事件处理程序附加到每个
span
,但我会避免这种情况。为什么要