具有动态模板的Vue.js组件(例如,事件处理程序)

时间:2017-09-12 06:41:33

标签: html vue.js vuejs2 vue-component

假设我做了一个名为test的组件,并将其插入到我的html中,如下所示:

<test :data="foo"></test>

如何实现点击属性值更改为属性值'data'?

Vue.component('test', {
props: ['data'],
template: '<div v-for="element in {{foo}}" >></div>'
});

只是为了概述我的期望 - 这就是我要找的东西:

<test :data="bar"></test>
<test :data="hello"></test>

渲染

<div v-for="element in bar" ></div>
<div v-for="element in hello" ></div>

BTW:感谢所有人参加SO:)

1 个答案:

答案 0 :(得分:3)

父:

<test :data="foo" @onMyEvent="data=$event"></test>

子组件:

Vue.component('test', {
    props: ['data'],
    template: '<div @click="$emit(\'onMyEvent\', \'bar\')"></div>'
});

请参阅DOCS

根据您的修改:

//Parent
<template>
    <div>
        <test :data="foo"></test>
        <test :data="bar"></test>
        <!-- or -->
        <test v-for="item in [foo, bar]" :data="item"></test>
    </div>
</template>
<script>
    import Test from './Test.vue'
    export default{
        data(){
            return {
                foo: ['foo-0', 'foo-1', 'foo-2', 'foo-3'],
                bar: ['bar-0', 'bar-1', 'bar-2', 'bar-3'],
            }
        },
        components: {
            test: Test
        }
    }
</script>
//Child component
<template>
    <div>
        <div v-for="element in data">{{ element }}</div>
    </div>
</template>
<script>
    export default{
        props: ['data'],
    }
</script>