vue大屏动态配置组件数量、每个组件的占比和位置代码示例

119 阅读1分钟

以下是使用Vue.js创建一个大屏组件,并且可以通过传递props来配置组件数量、每个组件的占比和位置的代码示例:

<template>
  <div class="big-screen">
    <div v-for="(item, index) in screenList" :key="index" :style="getStyle(item)">
      <slot :name="item.name"></slot>
    </div>
  </div>
</template>

<script>
export default {
  name: 'BigScreen',
  props: {
    screenList: {
      type: Array,
      required: true,
      default: () => []
    }
  },
  methods: {
    getStyle(item) {
      return {
        position: 'absolute',
        left: `${item.left}%`,
        top: `${item.top}%`,
        width: `${item.width}%`,
        height: `${item.height}%`
      }
    }
  }
}
</script>

<style>
.big-screen {
  position: relative;
  width: 100%;
  height: 100%;
}
</style>

在这个示例中,我们定义了一个名为BigScreen的组件,并且传递了一个名为screenList的props,它是一个数组,用来指定大屏组件的个数、占比和位置。

在组件的模板中,我们使用了v-for来遍历screenList数组,并为每个大屏组件指定样式(位置和大小),然后使用插槽来插入具体的大屏组件内容。

在组件的方法中,我们定义了一个名为getStyle的方法,它接受一个参数item,并返回一个包含位置和大小信息的样式对象,这个样式对象会被应用到每个大屏组件的容器元素上。

现在让我们看一个如何使用这个BigScreen组件的示例:

<template>
  <div style="height:100%">
    <big-screen :screen-list="screenList">
      <template #screen1>
        <div>第一个大屏内容</div>
      </template>
      <template #screen2>
        <div>第二个大屏内容</div>
      </template>
    </big-screen>
  </div>
</template>

<script>
import BigScreen from './BigScreen.vue'

export default {
  name: 'App',
  components: {
    BigScreen
  },
  data() {
    return {
      screenList: [
        { name: 'screen1', left: 0, top: 0, width: 50, height: 100 },
        { name: 'screen2', left: 50, top: 0, width: 50, height: 100 }
      ]
    }
  }
}
</script>

在这个示例中,我们在父组件中使用了BigScreen组件,并且传递了一个名为screenList的props,它包含了两个元素,分别代表了两个大屏组件的位置、大小和内容名称。

我们也定义了两个插槽(#screen1#screen2),它们分别对应了screenList数组中的两个元素,表示在第一个大屏和第二个大屏