Javascript 如何在vue渲染函数中为自定义组件声明v模型?

Javascript 如何在vue渲染函数中为自定义组件声明v模型?,javascript,vue.js,vuejs2,Javascript,Vue.js,Vuejs2,我的代码如下: 。。。 var-label_-key_-map={a:“1”,b:“2”,c:“3”,d:“4”} 渲染:(h)=>{ var form_data={} 用于(让输入标签\键\映射){ var form_item=h( “FormItem”, {props:{prop:key}}, [h('Input',{props:{type:“text”,vModel:“form_data.key”}})] ) } 在for循环中,我想将表单数据.a,表单数据.b,表单数据.c绑定到每个输

我的代码如下:

。。。
var-label_-key_-map={a:“1”,b:“2”,c:“3”,d:“4”}
渲染:(h)=>{
var form_data={}
用于(让输入标签\键\映射){
var form_item=h(
“FormItem”,
{props:{prop:key}},
[h('Input',{props:{type:“text”,vModel:“form_data.key”}})]
)
}
在for循环中,我想将
表单数据.a
表单数据.b
表单数据.c
绑定到每个
输入

但是当我使用
vModel:“form_data[key]”或
vModel:“form_data.key”
时,这两种方法都不起作用。通常正确的编写方法是:
vModel:“form_data.a”

如何在
for
循环中解决此问题


编辑:实际案例是一个示例:

<Form :model="formValidate">
    <FormItem label="E-mail" prop="mail">
        <Input v-model="formValidate.mail" placeholder="Enter your e-mail"></Input>
    </FormItem>
</Form>


在本例中,我的
表单数据是
formValidate
。我使用
for
-循环生成
表单数据
,但我不能使用
“form\u data.a”
。如何绑定
v-model
(自定义组件的
输入
)现在?

不要在
render
声明中使用箭头函数。关于render函数的使用,要生成属性,请使用
attrs
,而不是
props
。另外,请引用以下内容:

渲染函数中没有直接的
v-model
对应项-您必须自己实现逻辑

下面是如何实现这一目标的演示

在呈现函数中声明DOM本机元素的
v-model
(例如
newvue({
el:“#应用程序”,
数据:{
表格数据:{a:“1”,b:“2”,c:“3”,d:“4”}
},
render(h){//不要使用箭头函数
var self=这个
var form_项目=[];
for(输入self.form_数据){
var form_item=h('div',{},
[
键+':',
h(‘输入’{
属性:{type:“text”},
//模拟“v型”
domProps:{value:self.form_data[key]},on:{input:function(event){self.form_data[key]=event.target.value}
})
]
);
表单项。推送(表单项);
}
var form=h('form',{},form_项);
返回h('div',{}[
形式,
h('pre',JSON.stringify(this.form_data))//为可视化调试添加
]);
}
});

不要在
渲染
声明中使用箭头函数。关于渲染函数的使用,要生成属性,请使用
属性
,而不是
道具
。此外,请引用以下内容:

渲染函数中没有直接的
v-model
对应项-您必须自己实现逻辑

下面是如何实现这一目标的演示

在呈现函数中声明DOM本机元素的
v-model
(例如
newvue({
el:“#应用程序”,
数据:{
表格数据:{a:“1”,b:“2”,c:“3”,d:“4”}
},
render(h){//不要使用箭头函数
var self=这个
var form_项目=[];
for(输入self.form_数据){
var form_item=h('div',{},
[
键+':',
h(‘输入’{
属性:{type:“text”},
//模拟“v型”
domProps:{value:self.form_data[key]},on:{input:function(event){self.form_data[key]=event.target.value}
})
]
);
表单项。推送(表单项);
}
var form=h('form',{},form_项);
返回h('div',{}[
形式,
h('pre',JSON.stringify(this.form_data))//为可视化调试添加
]);
}
});

h('custom-component'{
型号:{
值:self.form_data[键],
回调:(v)=>self.$set(self.form_数据,键,v),
表达式:“form_data[“+key+”]”
}
});
这种方式可以使
v-model
工作,但不是推荐的使用方式

我的建议仍然是对自定义组件使用
value
dom属性和
input
事件,如下所示:

h('custom-component'){
属性:{
value:this.myValue
},
关于:{
输入:val=>this.myValue=val
}
})
对于本机元素:

h('input'{
属性:{
类型:'text'
},
domProps:{
value:this.myValue
},
关于:{
输入:val=>this.myValue=val
}
})
更多详细信息请参见代码:

h('custom-component'){
型号:{
值:self.form_data[键],
回调:(v)=>self.$set(self.form_数据,键,v),
表达式:“form_data[“+key+”]”
}
});
这种方式可以使
v-model
工作,但不是推荐的使用方式

我的建议仍然是对自定义组件使用
value
dom属性和
input
事件,如下所示:

h('custom-component'){
属性:{
value:this.myValue
},
关于:{
输入:val=>this.myValue=val
}
})
对于本机元素:

h('input'{
属性:{
类型:'text'
},
domProps:{
value:this.myValue
},
关于:{
输入:val=>this.myValue=val
}
})

代码中的更多细节:

那么您想要的输出是什么?@PankajBisht没有输出。在渲染函数中,它的标准代码类似于:vModel:'form_data.a',但我使用for循环生成form_数据。我不知道键。为什么分配
undefined
而不是
label_key_map[key]
?表单数据绑定到表单。表单项绑定表单数据。x.初始数据应该是未定义的,或者“那么您想要的输出是什么?”PankajBisht未输出。在渲染函数中,其标准代码类似于:vModel:'form\u data.a',但我使用for循环生成表单数据。我不知道k