vue3+ts+ant-design-vue开发心得(长期更新)

"本文探讨了Vue 3.2中引入的<scriptsetup lang="ts">特性,如何简化脚本编写,以及如何使用defineProps和provide/inject进行组件间数据交互。还介绍了不同路由模式定义的方法。"
摘要由CSDN通过智能技术生成
<script setup lang="ts">

import { ref } from "vue";

import { publicMethods } from "@/utils/publicMethods";

import { FileItem } from "@/utils/publicType";



const props = defineProps<{

  fileList: FileItem[];

  length: number;

}>();



const { getBase64 } = publicMethods();



const previewVisible = ref<boolean>(false);

const previewImage = ref<string | undefined>("");



const handleCancel = (type: number) => {

  previewVisible.value = false;

};



const handlePreview = async (file: FileItem) => {

  if (!file.url && !file.preview) {

    file.preview = (await getBase64(file.originFileObj)) as string;

  }

  previewImage.value = file.url || file.preview;

  previewVisible.value = true;

};

</script>

vue3.2开始,在script标签中添加setup(<script setup lang="ts">)之后

1. script标签中便可以直接写方法,定义数据对象。

2. 引入组件后也不用再components中注册,模板中直接引用即可。

3. 使用props时,需要用到defineProps来实现

// 不带默认值
const props = defineProps<{
  fileList: FileItem[];
  length: number;
}>();

// 带默认值
const props = withDefaults(
  defineProps<{
    fileList: any;
    length: number;
    type: number;
    width: number;
    height: number;
    cutting: boolean;
    disabled: boolean;
    urlType: number;
  }>(),
  {
    width: 480,
    height: 320,
    cutting: true,
    disabled: false,
    urlType: 1
  }
);

4. provide,inject 用来替代props实现组件间数据传递。 

provide("activitylData", activitylData);在父组件中将数据提供给其子孙组件,不论时子组件还是孙子组件都可通过inject方法直接引用。

const activitylData: any = inject('activitylData'); 用来接收祖先组件传递的数据。

provide,inject本身不提供数据监听,如需监听数据,需将provide提供的数据通过ref或reactive定义。

5. 路由模式定义

history模式定义

import { createRouter, createWebHistory} from 'vue-router';
const router = createRouter({
  history: createWebHistory(),
  routes
});

hash模式定义

import { createRouter, createWebHashHistory } from 'vue-router';

const router = createRouter({

  history: createWebHashHistory(),

  routes

});

Vue3 中结合 TypeScript 使用 Ant Design Vue (ADV) 的弹窗组件并实现拖动功能,你需要做以下几个步骤: 1. 首先,在项目中安装需要的依赖项,确保已经安装了 `@ant-design/icons` 和 ` vant-draggable` 或者直接使用 Vue 的内置 `v-model.draggable` 功能。你可以通过 npm 或 yarn 进行安装: ```bash npm install @ant-design/icons vant-draggable ``` 2. 在 TypeScript 中导入相应的组件: ```typescript import { MessageBox } from 'ant-design-vue'; import Draggable from 'vant/draggable'; ``` 3. 在使用 MessageBox 组件时,创建一个包含可拖动内容的自定义组件。例如,你可以创建一个名为 `DraggableMessageBox.vue` 的文件: ```html <template> <draggable v-model="dragItems" :options="{ disabled: !isDragging }"> <div class="draggable-item" :key="item.id" draggable="true">{{ item.content }}</div> </draggable> </template> <script lang="ts"> import { Component, Prop, Vue } from 'vue-property-decorator'; interface Item { id: string; content: string; } export default class DraggableMessageBox extends Vue { isDragging = false; dragItems: Item[] = []; // 如果有数据源,可以初始化 items // computed: { // items() { // return [...]; // 根据实际情况填充数据 // } // }, } </script> ``` 4. 将这个自定义组件作为参数传递给 MessageBox 并设置可拖动属性: ```typescript const result = await MessageBox.warning({ title: '提示', message: this.DraggableMessageBox, draggable: true, // 添加此属性启用拖动 }); ``` 5. 当用户开始拖动时,你可以更新状态跟踪是否正在拖动,并相应地调整 UI 或处理其他逻辑: ```typescript mounted() { this.$refs.draggable.$on('dragstart', () => { this.isDragging = true; }); this.$refs.draggable.$on('drop', async (e: any) => { // 处理拖放事件,例如更新数据 console.log('dropped at index:', e.index); this.isDragging = false; }); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值