【问题标题】:vue.js add event listener to button in Render functionvue.js 将事件监听器添加到渲染函数中的按钮
【发布时间】:2016-11-24 05:15:46
【问题描述】:

我想使用 Vue.js Render 函数在 javascript 中制作组件。现在我可以制作一个 SPAN 和一个 BUTTON 的 HTML 结构。当我单击按钮时,我希望它在控制台中输出,但它只是不起作用。这里是我的代码:

<script src="https://unpkg.com/vue/dist/vue.js"></script>
<div id="app">
  <counter></counter>
</div>
<script>
    var a = {
           data () {
              return {count: 1}
            },
            methods: {
              inc () {console.log(this.count)}
            },
            render:function(h){
              var self = this
              var buttonAttrs ={
                    on:{click:self.inc}
                  }
              var span = h('span',this.count.toString(),{},[])
              var button = h('button','+',buttonAttrs,[])
              return h('div' 
                ,{},
                [
                  span,
                  button
                ])

            }
      }

  new Vue({
    el:'#app',
    components:{
      counter : a
     }}
  )

</script>

codepen 欢迎任何回复,谢谢。

【问题讨论】:

    标签: javascript vue.js vue-component


    【解决方案1】:

    在构建按钮时,您对 createElement 方法的使用不正确,因为您传递了错误的一系列参数。

    首先,您应该通过按钮属性对象设置内部 html +,而不是通过为数据对象保留的第二个参数,根据 documentation

    // {Object}
    // A data object corresponding to the attributes
    // you would use in a template. Optional.
    {
        // (see details in the next section below)
    },
    

    因此,您应该按如下方式构建您的 buttonAttrs 对象:

    var buttonAttrs = {
        on: { click: self.inc },
        domProps: {
            innerHTML: '+'
        },
    };
    

    其次,您应该按照上述文档将 buttonAttrs 作为第二个参数传递给您的 createElement 调用:

    var button = h('button', buttonAttrs, []);
    

    看到这个工作codepen

    【讨论】:

      猜你喜欢
      • 2012-10-10
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多