Vue3项目实战

目录

一、项目准备

二、基础语法应用

2.1、mixin应用

2.2、网络请求

2.3、显示与隐藏

2.4、编程式路由跳转

2.5、下载资料

2.6、调用方法

2.7、监听路由变化

2.8、pinia应用

(1)存储token(user.js)

(2)全选全不选案例(car.js)

一、项目准备

下载:

cnpm i unplugin-auto-import -D   //setup 语法糖插件

npm i -D @types/node                //解决vite不能@问题

npm install element-plus --save  //组件库

npm install -D unplugin-vue-components  //按需引入组件库

npm install less
npm install less-loader
npm install @originjs/vite-plugin-global-style

在vite.config.js中

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import globalStyle from '@originjs/vite-plugin-global-style'
// cnpm i unplugin-auto-import -D setup 语法糖插件
import AutoImport from 'unplugin-auto-import/vite'
import path from 'path'
export default defineConfig({
  plugins: [vue(),
  AutoImport({
    imports: ['vue', 'vue-router']
  }),
  globalStyle({
    sourcePath:'./src/assets/css',
    lessEnabled:true
  }),
],
  resolve: {
    // 配置路径别名(解决vite不能@问题)  npm i -D @types/node
    alias: {
      "@": path.join(__dirname, 'src'),
      "#": path.join(__dirname, 'types')
    }
  }
})

组件库地址: 设计 | Element Plus

二、基础语法应用

2.1、mixin应用

在v-for循环的时候,后端返回的状态是数字,而前端需要将它回显成对应的汉字,可以使用mixin将这快封装起来。

import courseType from "../../mixins/courseType.js";
let { courseTypeFn } = courseType();

mixin文件夹下的js代码:

export default function () {
    let courseTypeFn = (type) => {
        let val = ''
        switch (type) {
            case 1:
                val = '初级';
                break;
            case 2:
                val = '中级';
                break;
            case 3:
                val = '高级';
                break;
            default:
                val = ''
        }
        return val;
    }
    return { courseTypeFn, }
}

视图应用:{{ courseTypeFn(item.courseLevel) }}

methods里面也可以判断状态:

2.2、网络请求

拿到请求后,先定义数据类型,在onBeforeMount生命周期里面去获取数据。

// api
import {
  getSliders,
  getFirstCategorys,
} from "@/api/api.js";
import { onBeforeMount } from "vue";
// 轮播图数据
let sliderList = ref([]);
// 一级分类数据
let firstList = ref([]);
// 生命周期
onBeforeMount(() => {
  getSliders().then((res) => {
    sliderList.value = res.data.list;
  });
  getFirstCategorys().then((res) => {
    firstList.value = res.data.list;
  });
});

2.3、显示与隐藏

<div class="active-r" v-if="isShow"></div>
// 定义数据
let isShow = ref(false);
// 事件
const mouseHover = () => {
  isShow.value = true;
  );
};

2.4、编程式路由跳转

import { useRouter } from "vue-router";
const router = useRouter();
//方法里跳转指定页面
const GoJump = (id) => {
  router.push({
    path: "/about/details",
    query: { id },
  });
};

接收参数

import { useRoute } from "vue-router";
let route = useRoute();
courseId: route.query.id,

2.5、下载资料

获取后端返回的文件流,自己组装出一个文件全称,在页面创建a标签,实现下载功能。

const download = (item) => {
  downloadAttachment({
    courseId: item.courseId,
    attachmentId: item.id,
  }).then((res) => {
    //后端返回的是文件流
    const blob = new Blob([res]);
    let fileName = item.attachmentName;
    let fileUrl = item.attachmentUrl;
    const extName = fileUrl.substring(fileUrl.lastIndexOf(".")); //.gif
    fileName = fileName + extName; //kkkk.gif
    // 前端创建a标签进行新窗口的打开
    const link = document.createElement("a");
    link.download = fileName;
    link.target = "_black";
    link.style.display = "none";
    link.href = URL.createObjectURL(blob);
    document.body.appendChild(link);
    link.click();
    URL.revokeObjectURL(link.href);
    document.body.removeChild(link);
  });
};

或者可以直接 window.open(info.url);

2.6、调用方法

const pageSize = ref(8);
const getlist = () => {
  mostNew({
    pageNum: pageNum.value,
    pageSize: pageSize.value,
  }).then((res) => {
    newList.value = res.data.pageInfo.list;
    total.value = res.data.pageInfo.total;
  });
};
const handleSizeChange = (val) => {
  pageSize.value = val;
  getlist();
};

2.7、监听路由变化

// 头部监听路由变化
watch(
  () => router.currentRoute.value.name,
  (toPath) => {
    if (toPath == "Home") {
      currentId.value = 1;
    } else if (toPath == "About") {
      currentId.value = 2;
    } else if (toPath == "Shop") {
      currentId.value = 3;
    }
  },
  { immediate: true }
);

2.8、pinia应用

下载持久化存储插件:cnpm i pinia-plugin-persist

文件夹的index.js

import {createPinia} from 'pinia'
import piniaPluginPersist from 'pinia-plugin-persist'
const store=createPinia()
store.use(piniaPluginPersist)
export default store

(1)存储token(user.js)

import { defineStore } from 'pinia'
export const useUserStore = defineStore({
    id: 'user',
    state: () => {
        return {
            token: ''
        }
    },
    actions: {
        setToken(token) {
            this.token = token
        }
    },
    // 开启数据缓存
    persist: {
        enabled: true,
        strategies: [{
            key: 'xiao_user',
            storage: localStorage
        }]
    }
})

页面使用:

// pinia
import { useUserStore } from "../stores/user.js";
const userStore = useUserStore();
 userStore.setToken(res.data.accessToken);

(2)全选全不选案例(car.js)

解构

import { defineStore } from 'pinia'
export const useCartStore = defineStore({
    id: 'cart',
    state: () => {
        return {
            cartList: [],//购物车数量
            select: [],//选中的商品id
        }
    },
    getters: {
        isChecked() {
            return this.select.length == this.cartList.length
        }
    },
    actions: {
        addCart(list) {
            list.forEach(v => {
                v['check'] = true
                this.select.push(v.id)
            })
            this.cartList = list
        },
        // 全选
        all() {
            this.select = this.cartList.map(v => {
                v['check'] = true
                return v.id
            })
        },
        // 全不选
        unAll() {
            this.cartList.forEach(v => {
                v['check'] = false
            })
            this.select = []
        },
        //单个选
        itemChecked(index) {
            let id = this.cartList[index].id;
            let idx = this.select.indexOf(id);//检查它里面有没有
            if (idx > -1) {
                this.cartList[index].check = false;
                this.select.splice(idx, 1);//有
            } else {
                this.cartList[index].check = true;
                this.select.push(id);//没有
            }
        }
    },
})

页面使用:

import { storeToRefs } from "pinia";
import { useCartStore } from "../stores/car.js";
let cartStore = useCartStore();
let { cartList, isChecked } = storeToRefs(cartStore);
onBeforeMount(() => {
  getShopCarList().then((res) => {
  firstList.value = res.data.list;
  });
  cartStore.addCart(firstList.value);
  console.log(cartStore.cartList);
});
const checkAll = () => {
  if (isChecked.value) {
    cartStore.unAll(); // 不选
  } else {
    cartStore.all(); // 全选
  }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/88689.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Bigemap在地质工程勘察行业中的应用

1.选择Bigemap的原因&#xff1a; 师兄在测绘局工作&#xff0c;买过全能版&#xff0c;帮我下载过高程数据&#xff0c;我觉得效果可以&#xff0c;于是联系到软件公司进行试用、咨询 2.使用场景&#xff1a; 影像、等高线、地形等资料下载&#xff0c;下载完放进arcgis 软件&…

通俗理解拉格朗日乘数法

再理解拉格朗日乘数法 笔记来源&#xff1a;Understanding Lagrange Multipliers Visually 本人相关博客&#xff1a; 1.方向导数和梯度向量 2.最小二乘和回归线、拉格朗日乘数、二元泰勒多项式、带约束变量的偏导数 函数&#xff1a; z f ( x , y ) zf(x,y) zf(x,y)&#x…

LinkedList的顶级理解

目录 1.LinkedList的介绍 LinkedList的结构 2.LinkedList的模拟实现 2.1创建双链表 2.2头插法 2.3尾插法 2.4任意位置插入 2.5查找关键字 2.6链表长度 2.7遍历链表 2.8删除第一次出现关键字为key的节点 2.9删除所有值为key的节点 2.10清空链表 2.11完整代码 3.…

蓝蓝设计ui设计公司作品--泛亚高科-光伏电站控制系统界面设计

泛亚高科(北京)科技有限公司&#xff08;以下简称“泛亚高科”&#xff09;&#xff0c;一个以实时监控、高精度数值计算为基础的科技公司&#xff0c; 自成立以来&#xff0c;组成了以博士、硕士为核心的技术团队&#xff0c;整合了华北电力大学等高校资源&#xff0c;凭借在电…

运算放大器发展史

在内部集成了一个补偿电容 MPS公司OP07推出后&#xff0c;大受欢迎。各家厂商都推出了自己的 这4款都是可以替换的

Linux搭建SSLVpn

安装http、ssl服务 编辑http配置文件 修改http的136行&#xff0c;276行以及990行 1、136行将监听端口注释 2、276行和990行修改为自己的域名和要访问的端口 修改http文档最后那部分 新添ssl配置信息&#xff0c;将端口修改为443&#xff08;截图错了server.key应该放在/etc/…

告别gazebo开启长时间等待 设置gazebo打开不再联网找模型

学过ros的对gazebo仿真软件应该都不会陌生&#xff0c;但是有时启动真的很烦人&#xff0c;经常卡在这个地方很长时间&#xff0c;查阅资料 gazebo软件开启的时候会自动从国外官网下载模型&#xff0c;因此这个过程比较漫长&#xff0c;原因是网站在国外&#xff0c;下载不顺畅…

GaussDB数据库SQL系列:DROP TRUNCATE DELETE

目录 一、前言 二、GaussDB的 DROP & TRUNCATE & DELETE 简述 1、命令简述 2、命令比对 三、GaussDB的DROP TABLE命令及示例 1、功能描述 2、语法 3、示例 四、GaussDB的TRUNCATE命令及示例 1、功能描述 2、语法 3、示例 4、示例 五、GaussDB的DELETE命令…

【AWS】安装配置适用于 Eclipse 的 AWS 工具包

目录 0.环境 1.步骤 1&#xff09;安装Eclipse 2&#xff09;安装AWS工具包 ① 在这个路径下点开安装软件的界面 ② 点击【Add】打开添加窗口 ③ 输入aws的工具包地址 ④ 勾选需要的工具&#xff0c;点击【Next】 ⑤ 将要安装的工具&#xff0c;点击【Next】 ⑥ 选择接受…

【Linux网络】Cookie和session的关系

目录 一、Cookie 和 session 共同之处 二、Cookie 和 session 区别 2.1、cookie 2.2、session 三、cookie的工作原理 四、session的工作原理 一、Cookie 和 session 共同之处 Cookie 和 Session 都是用来跟踪浏览器用户身份的会话方式。 二、Cookie 和 session 区别 2.…

R包开发1:RStudio 与 GitHub建立连接

目录 1.安装Git 2-配置Git&#xff08;只需配置一次&#xff09; 3-用SSH连接GitHub(只需配置一次) 4-创建Github远程仓库 5-克隆仓库到本地 目标&#xff1a;创建的R包&#xff0c;包含Git版本控制&#xff0c;并且能在远程Github仓库同步&#xff0c;相当于发布在Github。…

Nexus2迁移升级到Nexus3

与 Nexus 2.x 相比&#xff0c;Nexus 3.x 为我们提供了更多实用的新特性。SonaType 官方建议我们&#xff0c;使用最新版本 Nexus 2.x 升级到最新版本 Nexus 3.x&#xff0c;并在 Nexus 升级兼容性 一文中为我们提供了各个版本 Nexus 升级到最新版本 Nexus 3.x 的流程&#xff…

C++ malloc/free/new/delete详解(内存管理)

C malloc/free/new/delete详解&#xff08;内存管理&#xff09; malloc/free典型用法内存分配实现过程brk和mmap申请小于128k的内存申请大于128k的内存释放内存brk和mmap的区别 new/delete典型用法 内存分配实现过程new/delete和malloc/free的区别malloc对于给每个进程分配的内…

服务器数据恢复-HP EVA存储VDISK被删除的数据恢复案例

服务器数据恢复环境&#xff1a; 某单位有一台HP EVA存储&#xff0c;连接2组扩展柜&#xff0c;扩展柜中有12块FATA磁盘和10块FC磁盘&#xff0c;不确定数量的LUN&#xff0c;主机安装WINDOWS SERVER操作系统&#xff0c;存储设备用来存放该单位的重要资料。 服务器故障初检&…

java-红黑树

节点内部存储 红黑树规则 或者&#xff1a; 红黑树添加节点规则&#xff1a; 添加节点默认是红色的&#xff08;效率高&#xff09; 红黑树示例 注&#xff1a;红黑树增删改查性能都很好

SpringBoot案例-配置文件-yml配置文件

配置格式 SpringBoot提供了多种属性配置方式 application.propertiesapplication.ymlapplication.yaml常见配置文件格式对比 XML&#xff08;臃肿&#xff09; <configuration><database><host>localhost</host><port>3306</port><use…

LVS集群 (NET模式搭建)

目录 一、集群概述 一、负载均衡技术类型 二、负载均衡实现方式 二、LVS集群结构 一、三层结构 二、架构对象 三、LVS工作模式 四、LVS负载均衡算法 一、静态负载均衡 二、动态负载均衡 五、ipvsadm命令详解 六、搭建实验流程 一、首先打开三台虚拟机 二、…

使用haproxy搭建web架构

haproxy HAProxy是一个免费的负载均衡软件&#xff0c;可以运行于大部分主流的Linux操作系统上。 HAProxy提供了可以在七层和四层两种负载均衡能力&#xff0c;它可以提供高可用性、负载均衡、及基于TCP和HTTP应用的代理。适用于负载大的Web站点&#xff0c;在运行在硬件上可…

《深度学习计算机视觉 》书籍分享(包邮送书三本)

深度学习计算机视觉介绍 随着计算机技术的发展和进步&#xff0c;计算机视觉领域得到了广泛的关注和研究。而深度学习作为一种强大的机器学习方法&#xff0c;已经成为计算机视觉领域的重要工具之一。本文将介绍深度学习在计算机视觉中的应用和取得的成果。 深度学习是一种模…