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

Posted

技术标签:

【中文标题】带有动态模板的 Vue.js 组件(例如事件处理程序)【英文标题】:Vue.js component with dynamic template (e.g. eventhandler) 【发布时间】:2018-02-20 12:22:48 【问题描述】:

假设我制作了一个名为 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>

顺便说一句:感谢大家在这里参与 SO :)

【问题讨论】:

【参考方案1】:

家长:

<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>

【讨论】:

感谢您的回答,但我不想在点击时更改 :data 值。我正在寻找一种在调用模板时重用 :data 的方法。请查看我编辑后的预期。 您不能在模板根目录中使用v-for,但这是允许的template: '&lt;div&gt;&lt;div v-for="..." &gt;&lt;/div&gt;&lt;div&gt;' @j.mueller

以上是关于带有动态模板的 Vue.js 组件(例如事件处理程序)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 5.3 中使用带有 Vue.js 2.0 的组件中使用外部 html 模板

Vue.js - 具有动态组件的多个事件

带有 Vue js 组件和 Googlebot 的 Laravel Blade 模板

将 Laravel Blade 模板与 Vue JS 和事件监听器一起使用

Vue.js 的模板语法:插值v-bind事件处理

Vue.js 2使用中的难点举例--子组件,slot, 动态组件,事件监听