我有一个使用模板的vue组件,我想将其更改为使用渲染功能,我知道createElement(' h1',' title')但是如何使用类似'选择'有所有选择吗?这是基于模板的组件:
https://jsfiddle.net/aaoehLqe/
<div id="app">
<p>{{ message }}</p>
<myselect v-bind:option= "option" ></myselect>
{{option}}
</div>
答案 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
部分。