vue.js将事件侦听器添加到Render函数

时间:2016-11-24 05:15:46

标签: javascript vue.js vue-component

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

<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 欢迎任何回复,谢谢。

1 个答案:

答案 0 :(得分:3)

构建按钮时,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)
},

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

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

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

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

请参见此工作codepen