Vue.js Vue:使用相同的道具和事件处理程序,在同一模板中多次使用同一组件
我有一个Vue组件,它通过Vue.js Vue:使用相同的道具和事件处理程序,在同一模板中多次使用同一组件,vue.js,Vue.js,我有一个Vue组件,它通过v-bind接收一堆道具,并使用v-on连接多个事件处理程序 <SomeComponent v-for="object in objects" v-bind:prop1="prop1" v-bind:prop2="prop2" v-bind:prop3="prop3" v-bind:key="object.created_at" v-on:event-one="eventOne" v-on:event-two="eventTwo"
v-bind
接收一堆道具,并使用v-on
连接多个事件处理程序
<SomeComponent
v-for="object in objects"
v-bind:prop1="prop1"
v-bind:prop2="prop2"
v-bind:prop3="prop3"
v-bind:key="object.created_at"
v-on:event-one="eventOne"
v-on:event-two="eventTwo"
v-on:event-three="eventThree"
/>
一切正常
问题在于,根据某些条件,该组件可能出现在接口的不同部分它是完全相同的组件,具有完全相同的道具和事件处理程序
我们目前的方法是简单地复制和粘贴上述所有行,但它似乎容易出错且冗长,因为如果明天我们需要添加另一个事件处理程序(比如v-on:event-four=“eventFour”
),则需要手动将其添加到模板中SomeComponent
的每个实例中。任何道具的改变都是一样的
在React中,我们可能会将该组件包装在一个函数中,并根据需要像调用{renderSomeComponent()}
一样调用它
使用Vue的方法是什么?一种方法是使用一种方法为道具和事件创建JavaScript对象。(除了一个绑定依赖于
v-for
循环的对象之外,您可以不使用计算属性。)
<SomeComponent
v-for="object in objects"
v-bind="getProps(object)"
v-on="getHandlers()"
/>
computed: {
getHandlers() {
return {
"event-one": this.eventOne,
"event-two": this.eventTwo,
"event-three": this.eventThree
};
}
},
methods: {
getProps(object) {
return {
"prop1": this.prop1,
"prop2": this.prop2,
"prop3": this.prop3,
"key": object.created_at
}
},
eventOne(). { /* ... */ },
eventTwo() { /* ... */ },
eventThree() { /* ... */ }
},
data() {
return {
prop1: /* ... */,
prop2: /* ... */,
prop3: /* ... */
}
}