<template>
  <div id="app">
    <draggable v-model="components" @end="onEnd">
      <transition-group>
        <component 
          v-for="(item, index) in components" 
          :key="index" 
          :is="item.type" 
          :style="item.style"
        />
      </transition-group>
    </draggable>
  </div>
</template>
<script>
import draggable from 'vuedraggable';
export default {
  name: 'App',
  components: {
    draggable,
    // 这里可以注册你想要拖拽的组件,例如 Button, Input 等等
    Button: {
      template: '<button>Button</button>'
    },
    Input: {
      template: '<input type="text" />'
    }
  },
  data() {
    return {
      components: [
        { type: 'Button', style: { margin: '10px' } },
        { type: 'Input', style: { margin: '10px' } }
      ]
    };
  },
  methods: {
    onEnd(event) {
      console.log('Drag ended:', event);
      // 可以在这里处理拖拽结束后的逻辑
    }
  }
};
</script>
<style scoped>
#app {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: 20px;
}
</style>模板部分 (<template>):
draggable 组件来实现拖拽功能。v-model 绑定了一个 components 数组,这个数组包含了所有可拖拽的组件。transition-group 用于在拖拽过程中添加过渡效果。component 标签动态渲染了 components 数组中的每个组件,并根据 item.type 和 item.style 来设置具体的组件类型和样式。脚本部分 (<script>):
vuedraggable 库来实现拖拽功能。Button 和 Input,你可以根据需要替换为实际使用的组件。data 中定义了一个 components 数组,存储了页面上现有的组件及其样式。methods 中定义了 onEnd 方法,在拖拽结束时触发,可以用来处理一些逻辑,比如保存新的顺序或更新状态。样式部分 (<style scoped>):
希望这段代码能帮助你理解如何使用 Vue 实现拖拽生成页面的功能。如果有任何问题,欢迎继续讨论!
上一篇:vue tsx
下一篇:vue2 自定义指令
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站