如何在vue的createElement中创建一个select?

时间:2017-03-12 01:38:46

标签: javascript vue.js

我有一个使用模板的vue组件,我想将其更改为使用渲染功能,我知道createElement(' h1',' title')但是如何使用类似'选择'有所有选择吗?这是基于模板的组件:

https://jsfiddle.net/aaoehLqe/

<div id="app">
  <p>{{ message }}</p>
  <myselect  v-bind:option= "option" ></myselect>
  {{option}}
</div>

3 个答案:

答案 0 :(得分:3)

以下是createElement的选择组件:

Vue.component('myselect', {
  props: ['option'],
  render: function(createElement) {
    var self = this
    return createElement(
      'select', {
        domProps: {
          value: self.option.value
        },
        on: {
          input: function(event) {
            self.option.value = event.target.value
          }
        }
      }, [
        createElement('option', {
          attrs: {
            value: 0
          }
        }, 'Under 1'),
        createElement('option', {
          attrs: {
            value: 1
          }
        }, '1'),
      ]
    )
  },
})

你可以在这里看到工作小提琴:https://jsfiddle.net/aaoehLqe/1/

要了解其工作原理,您可以在文档中查看createElement的API详细信息:

// @returns {VNode}
createElement(
  // {String | Object | Function}
  // An HTML tag name, component options, or function
  // returning one of these. Required.
  'div',
  // {Object}
  // A data object corresponding to the attributes
  // you would use in a template. Optional.
  {
    // (see details in the next section below)
  },
  // {String | Array}
  // Children VNodes. Optional.
  [
    createElement('h1', 'hello world'),
    createElement(MyComponent, {
      props: {
        someProp: 'foo'
      }
    }),
    'bar'
  ]
)

答案 1 :(得分:1)

这是一个基于小提琴的基本版本。

Vue.component("mySelect", {
  props:["value"],
  render(h){
    const vm = this;
    let options = [];
    for (let c = 0; c < 18; c++)
      options.push(h("option", {
        domProps:{innerHTML: c},
        attrs:{value: c},
      }))
    return h("select",{
      domProps:{
        value: this.value.value
      },
      on:{
        input(event){
          vm.$emit('input', {value:event.target.value})
        }
      }
    }, options)
  }
})

答案 2 :(得分:1)

你可以试试这个:

Vue.component('myselect', {
  props: ['option'],
  data () {
    return {
      items: [
        //
      ]
    }
  },
  render (h) {
    var self = this

    return h('select', {
      class: { 'form-control': true },
      domProps: { value: this.option.value },
      on: {
        input (event) {
          self.option.value = event.target.value
        }
      }
    }, this.items.map((item) => h('option', {
      attrs: { value: item }
    }, item)))
  }
})

[ demo ]

请查看v-if and v-for&amp; v-model部分。