【问题标题】:How to bind a click event on “v-html” in Vue如何在 Vue 中绑定“v-html”上的点击事件
【发布时间】:2017-11-12 23:11:45
【问题描述】:

我在jsfiddle中有一个简单的示例,如示例中所述,我想通过v-html插入元素,然后在插入元素中绑定事件。除了这种方式加id操作dom,还有没有更好的办法?

https://jsfiddle.net/limingyang/bnLmx1en/1/

<script src="https://unpkg.com/vue/dist/vue.js"></script>
<div id="app">
    <div v-html="link"></div>
</div>

var app = new Vue({
    el: '#app',
    data: {
        link: '<a href="javascript:void(0)">click me</a>'
    }
})

【问题讨论】:

  • vuejs.org/v2/guide/syntax.html#Raw-HTML 表示绑定被忽略。你可以这样做&lt;div @click="yourMethod" v-html="link"&gt;&lt;/div&gt;
  • 我只想将事件绑定到a
  • @BelminBedak 我试过这样,但这不起作用,它不会点击 div。

标签: events click vue.js


【解决方案1】:

您可以在div 上添加ref,并像在常规JavaScript 中那样对其子元素进行操作。例如,您可以为mounted hook 内的链接设置事件监听器:

var app = new Vue({
  el: '#app',
  data: {
    link: '<a href="#">click me</a>'
  },
  mounted() {
    this.$refs['mydiv'].firstChild.addEventListener('click', function(event) {
      event.preventDefault();
      console.log('clicked: ', event.target);
    })
  }
})
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<div id="app">
    <div v-html="link" ref="mydiv"></div> <!-- notice 'ref' -->
</div>

【讨论】:

  • 我一直在努力让它发挥作用。这非常适合我的需要。
  • 动态更新v-html时这似乎不起作用。
  • @svenema 将其放入方法函数中,并在事情发生变化时再次运行该函数
  • "TypeError: Cannot read property 'addEventListener' of null" 我的代码出现了这个错误
猜你喜欢
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 1970-01-01
  • 2020-06-27
  • 2016-12-12
  • 2014-07-04
  • 2015-07-26
相关资源
最近更新 更多