Vue.js 将处理程序的对象传递给v-on和访问方法
我有一个Vue.js 将处理程序的对象传递给v-on和访问方法,vue.js,Vue.js,我有一个v-for循环,在这个循环中,我根据数据建立了一行按钮。我还动态地将处理程序绑定到它们,这是我正在努力解决的部分 <component is="button.component" v-for="(button, index) in group" :key="index" v-on="button.handlers" > Text </component> Vue抱怨字符串'update(value)不是一个函数,但我不知道如何获得与v-on:
v-for
循环,在这个循环中,我根据数据建立了一行按钮。我还动态地将处理程序绑定到它们,这是我正在努力解决的部分
<component
is="button.component"
v-for="(button, index) in group"
:key="index"
v-on="button.handlers"
>
Text
</component>
Vue抱怨字符串'update(value)
不是一个函数,但我不知道如何获得与v-on:click=“update(button.value)”
等效的函数,该函数将在模板中工作。
关于如何解决这个问题,有什么想法吗?在对象中使用
v-on
引入了一些限制,无法编译“update(button.value)”字符串并使用本地button.value
value,因为它是在模板之外定义的
可以使用类似于v-on
的自定义指令提供此功能
否则,所有必要的数据都需要提供给具有helper函数的处理程序:
<button
v-for="(button, index) in group"
:key="index"
v-on="mapHandlers(button, { value: button.value })"
>
...
methods: {
mapHandlers(button, data) {
let remappedHandlers = {};
for (let eventName in button.handlers) {
let handler = button.handlers[eventName];
remappedHandlers[eventName] = e => handler(e, data);
}
return remappedHandlers;
},
update(e, { value }) { ... }
},
data () {
return {
group: [
{
value: 'foo',
handlers: { click: this.update }
}
]
}
}
...
方法:{
映射处理程序(按钮、数据){
让RemappedHandler={};
for(让eventName进入button.handlers){
let handler=button.handlers[eventName];
remappedHandlers[eventName]=e=>handler(e,数据);
}
返回重新映射的句柄;
},
更新(e,{value}){…}
},
数据(){
返回{
组:[
{
值:“foo”,
处理程序:{单击:this.update}
}
]
}
}
您能否详细介绍一下处理程序的动态特性?有很多不同的方法来解决这个问题,但是很难从你给出的例子中知道应该采取哪种方法。了解您实际想做什么会很有用。@Skille我用一个更复杂的例子更新了这个问题,这个例子应该说明动态事件是如何用于交互的!不幸的是,我改变了问题a,但由于一个评论。然而,这个答案似乎是正确的!我懂了。是的,它可以工作,您可以访问uploadFile中的整个e
对象,或者如果uploadFile参数由于某种原因受到限制,则创建另一个包装函数,change:({files})=>uploadFile(files)
<button
v-for="(button, index) in group"
:key="index"
v-on="mapHandlers(button, { value: button.value })"
>
...
methods: {
mapHandlers(button, data) {
let remappedHandlers = {};
for (let eventName in button.handlers) {
let handler = button.handlers[eventName];
remappedHandlers[eventName] = e => handler(e, data);
}
return remappedHandlers;
},
update(e, { value }) { ... }
},
data () {
return {
group: [
{
value: 'foo',
handlers: { click: this.update }
}
]
}
}