Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向Vue.js组件中动态呈现的HTML添加事件_Javascript_Vue.js - Fatal编程技术网

Javascript 向Vue.js组件中动态呈现的HTML添加事件

Javascript 向Vue.js组件中动态呈现的HTML添加事件,javascript,vue.js,Javascript,Vue.js,我正在尝试在Vue.js组件中动态呈现一些HTML。我正在成功地呈现HTML。但是,我不知道如何连接动态渲染元素的事件。我创建了一个小例子。这个例子看起来可能太复杂了。然而,这只是真实例子的一小部分。示例如下所示,代码如下所示: new Vue({ el: '#app', data: { items: [ { name:'Item 1', isHtml:true, mold: function() {

我正在尝试在Vue.js组件中动态呈现一些HTML。我正在成功地呈现HTML。但是,我不知道如何连接动态渲染元素的事件。我创建了一个小例子。这个例子看起来可能太复杂了。然而,这只是真实例子的一小部分。示例如下所示,代码如下所示:

new Vue({
  el: '#app',
  data: {
    items: [
      { 
        name:'Item 1', 
        isHtml:true, 
        mold: function() {
          return '<button @click="onButtonOneClick">click</button>';
        }
      },

      {
        name: 'Item 2',
        isHtml: false
      },

      {
        name:'Item 3',
        isHtml: true,
        mold: function() {
          return '<button @click="onButtonThreeClick">click</button>';
        }
      }
    ]
  },

  methods: {
    getHtml: function(i) {
      return i.mold();
    },

    onButtonOneClick: function() {
      alert('First Item Clicked');
    },

    onButtonThreeClick: function() {
      alert('Third Item Clicked')
    }
  }
})
newvue({
el:“#应用程序”,
数据:{
项目:[
{ 
名称:'Item 1',
伊什特尔:没错,
模具:功能(){
返回“点击”;
}
},
{
名称:“项目2”,
isHtml:错误
},
{
名称:'项目3',
伊什特尔:没错,
模具:功能(){
返回“点击”;
}
}
]
},
方法:{
getHtml:函数(i){
返回i.模具();
},
onButtonOneClick:函数(){
警报(“单击的第一项”);
},
onButton单击:函数(){
警报('单击第三项')
}
}
})
如果你用这把小提琴,你会注意到我的两个按钮在屏幕上看起来很好。但是,当您实际单击按钮时,不会触发相关的单击事件。从我看到的情况来看,HTML似乎没有得到完全编译。我可能错了。但是,根据我在Chrome开发工具中看到的情况,它看起来是这样的


如何在Vue.js组件中为动态生成的HTML连接事件?

很抱歉,这是一个麻烦,但是为什么您的
数据中有Vue标记:
?这是行不通的。你能解释一下是什么让你走上这条路的吗?为什么标记不能保留在
模板中:

Vue确实有一个v-html指令,用于将javascript中的少量标记弹出到模板中,但此标记中的Vue标记不会被处理,这是您应该问心无愧地使用的功能之一


Vue外部的事件侦听器,在Vue渲染后连接,执行函数,但之后您必须在镜子中审视自己并问“哦,我做了什么”

您的示例与Vue试图完成的所有任务背道而驰。我建议在他们的文档中阅读Vue,或者学习一些教程。我并不是说不能这样做,因为你当然可以在以后绑定事件,但这是不明智的

当然,像这样的事情是行不通的:

mold: function() {
  return '<button @click="onButtonThreeClick">click</button>';
}
mold:function(){
返回“点击”;
}
这是因为在您注入此标记时,Vue已经呈现了标记

很难准确地说出你想要实现的目标,但也许类似的东西可以帮助你:


(打开控制台)

您正在尝试呈现“功能性html”,这基本上是Vue为您所做工作的本质。只需按原样呈现列表,并在“is_button”等属性中添加数据,然后在v-for中输出按钮的html并添加其事件。e、 g

   <div v-for="(item, index) in items">
    <button v-if="item.is_button" @click="onButtonClick(index)">
    <div>item.content</div>
   </div>

项目.内容

祝你好运

我普遍认为这不是一个好办法,但像“这永远不会奏效”这样的说法有点强烈。下面是一个例子,说明你需要做什么才能让它发挥作用。