【问题标题】:How to pass data to a component template如何将数据传递给组件模板
【发布时间】:2019-12-17 16:05:43
【问题描述】:

目前我在一个 vue 组件中定义了几个组件模板。我已经将一些定义为字符串,但是如果它变得更复杂,它就会变得有些难以理解。因此,我让它返回一个单独的组件作为模板。但是我不确定如何将数据传递给组件。

这是我的 vue 组件中的一个组件模板的当前方法示例。它将模板作为字符串返回并呈现 html。

progessTemplate: function () {
                    return {
                        template: ('progessTemplate', {
                            template: `
                                    <div id="myProgress" class="pbar">
                                        <div id="myBar" :class="barColor" :style="{'width': width}">
                                            <div id="label" class="barlabel" v-html=width ></div>
                                        </div>
                                    </div>`,
                            data: function () {
                                return { data: {} };
                                },
                            computed: {
                                width: function () {
                                    if (this.data.SLA <= 20) {
                                        this.data.SLA += 20;
                                    }
                                    return this.data.SLA + '%';
                                },
                                barColor: function(){
                                    if(this.data.SLA > 60 && this.data.SLA <= 80){
                                        return 'bar progressWarning';
                                    }else if(this.data.SLA > 80){
                                        return 'bar progressUrgent';
                                    }
                                }
                            }
                        })
                    }
                },

我想避免这种方法,而是调用一个单独的文件。

我将组件导入到我的 vue 文件中

    import QueryDetailTemplate from '../../ej2/queryDetailTemplate';

在我的主 vue 文件中,我有这个函数 'QueryDetailTemplate':

export default{
    data(){
        return{
        data: [...],
        QueryDetailTemplate: function(){
            return {
                    template: QueryDetailTemplate,
                    props:{
                           test: 'Hello World',
                           },
                   };
            },//end of QueryDetailTemplate
        }//end of data
    ...
}

在我的 QueryDetailTemplate.vue 这是我的代码:

<template>
    <div>
        Heyy {{test}} //undefined
    </div>
</template>
<script>
    export default{
        props: ['test'],

        created(){
            console.log(this.test); //shows undefined
        }
    }
</script>

它呈现的是硬编码的“嘿”,但它没有得到“测试”道具。

感谢任何指针

【问题讨论】:

  • 为什么QueryDetailTemplate是你主要组件的数据属性,你是如何渲染它的?
  • @DecadeMoon 我正在为来自 Essential JS2 for Vue 库的数据网格组件实现一个详细信息行。 QueryDetailTemplate 在此示例中将是 detailTemplate(单击源代码查看代码)ej2.syncfusion.com/vue/demos/#/material/grid/… 在示例中,他们没有提及实际如何设置模板或如何将道具从主组件传递给子组件.

标签: javascript vue.js syncfusion


【解决方案1】:

我不太确定您想要实现什么,但是...您应该将组件指定为这样的组件:

export default{
    components: {
        QueryDetailTemplate
    },
    data(){
        return{
        data: [...],
    }
}

或者如果你想异步导入:

import Vue from 'vue'

export default {
    methods: {
        import() {
             Vue.component(componentName, () => import(`./${componentName}.vue`));
        }
    }
}

然后你可以在 main 中渲染它:

<query-detail-template
    test='Hello World'>
</query-detail-template>

【讨论】:

  • 感谢您的评论,尽管我不确定您的回答是否有帮助(我的错,因为我的解释很糟糕)。基本上我正在为我的应用程序实现一个数据网格组件。基本上是一个花哨的数据表。有一个功能,如果您单击一行,您可以向下展开一个详细信息行,如下所示:ej2.syncfusion.com/vue/demos/#/material/grid/… 就像我在这里向另一个成员提到的那样,我不确定他们如何创建返回的 detailTemplate 或如何传递数据从父母那里得到它。
猜你喜欢
  • 1970-01-01
  • 2018-08-29
  • 2021-09-27
  • 1970-01-01
  • 2012-03-26
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 1970-01-01
相关资源
最近更新 更多