首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在vue-grid-layout项中传递组件

在vue-grid-layout项中传递组件
EN

Stack Overflow用户
提问于 2019-02-08 04:31:24
回答 1查看 2.5K关注 0票数 4

请帮助我理解如何在vue-grid-layout项目中传递导入的单个文件vue组件。

我知道如何传递简单的html,比如:https://jsfiddle.net/gmsa/jw2mmmpq/1/,但是我需要插入其他带有按钮和axios调用的组件,等等。

HTML:

代码语言:javascript
复制
<template>
  <div class="hello">
    <grid-layout
            :layout="layout"
            :col-num="12"
            :row-height="30"
            :is-draggable="true"
            :is-resizable="true"
            :vertical-compact="true"
            :margin="[10, 10]"
            :use-css-transforms="true"
    >

      <grid-item v-for="item in layout"
                 :x="item.x"
                 :y="item.y"
                 :w="item.w"
                 :h="item.h"
                 :i="item.i">
        <div v-html="item.c">
        </div>
        <Test></Test>
      </grid-item>
    </grid-layout>
  </div>
</template>

JS:

代码语言:javascript
复制
import VueGridLayout from 'vue-grid-layout';
  import Test from './test.vue';
  import Test from './test2.vue';

  let a = `This needs to be another component, like Test`;
  let b = `This needs to be another component, like Test2`;

  var testLayout = [
    {"x":0,"y":0,"w":2,"h":2,"i":"0", "c": a},
    {"x":2,"y":0,"w":2,"h":4,"i":"1", "c": b}
  ];
export default {
  name: 'HelloWorld',
  props: {
    msg: String
  },
  components: {
    GridLayout: VueGridLayout.GridLayout,
    GridItem: VueGridLayout.GridItem,
    Test,
    Test2
  },
  data: function (){
    return {
      layout: testLayout
    }
  }
}

在这里找不到任何想法:

https://github.com/jbaysolutions/vue-grid-layout

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-08 05:14:51

您需要dynamic components,这可以使用<component :is="component"></component>语法来完成。如果您希望显示的所有项目都是组件,则可以执行以下操作:

代码语言:javascript
复制
<grid-item v-for="item in layout"
             :x="item.x"
             :y="item.y"
             :w="item.w"
             :h="item.h"
             :i="item.i">
  <component :is="item.c"></component>
</grid-item>

和JavaScript:

代码语言:javascript
复制
import VueGridLayout from 'vue-grid-layout';
import Test from './test.vue';
import Test2 from './test2.vue';
export default {
  components: {
    GridLayout: VueGridLayout.GridLayout,
    GridItem: VueGridLayout.GridItem,
    Test,
    Test2
  },
  data: function (){
    return {
      layout: [
        {"x":0,"y":0,"w":2,"h":2,"i":"0", "c": 'Test'}, // component name used but you could also use a reference to the component
        {"x":2,"y":0,"w":2,"h":4,"i":"1", "c": 'Test2'}
      ];
    }
  }
}

如果只有一些项是组件,而另一些项是纯HTML,您也许可以标记布局数组中的组件:

代码语言:javascript
复制
layout: [
        {"x":0,"y":0,"w":2,"h":2,"i":"0", "c": 'Test', isComponent: true},
        {"x":2,"y":0,"w":2,"h":4,"i":"1", "c": '<h1>Hello World</h1>', isComponent: false}
      ];

然后在网格项插槽中有条件地呈现组件或普通HTML。

代码语言:javascript
复制
<grid-item v-for="item in layout"
             :x="item.x"
             :y="item.y"
             :w="item.w"
             :h="item.h"
             :i="item.i">
  <template>
    <component v-if="item.isComponent" :is="item.c"></component>
    <div v-else v-html="item.c"></div>
  </template>
</grid-item>
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54581808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档