【 Vue3 + Vite + setup语法糖 + Pinia + VueRouter + Element Plus 第二篇】(持续更新中)

news2024/9/22 6:03:10

在第一篇中我们讲述了Vue3框架的搭建以及Vue3的常用语法,这篇文章将使用 AxiosElement Plus 并使用封装组件的方式完成表格搭建。

本期需要掌握的知识如下:

  • 引入并封装 Axios 请求
  • 配置 .env 文件
  • 通过 api 接口获取数据

下期需要掌握的知识如下:

  • 组件的封装引入
  • 子组件通过 emit 改变父组件的值
  • 父组件 通过 defineExpose 改变子组件的值

因本地项目不需要后端介入,故所有的api都将请求项目根目录JSON文件

1. axios 使用 && .env 配置文件

安装命令:npm install axios vue-axios

安装完成后在main.js 中引入 axios

import axios from 'axios'
import VueAxios from 'vue-axios'

createApp(App)use(ElementPlus, { locale: zhCn }).use(VueAxios, axios).mount('#app')

配置 .env文件

在这里插入图片描述

我们在项目根目录下新建 .env.env.prod文件
分别对应 本地环境 生产环境

// 这里是环境配置
VITE_NODE_ENV = "dev"  
// 这里是设置的请求的基础路径 也就是 baseURL
VITE_NODE_BESE_API = '/'
VITE_NODE_ENV = "prod"
VITE_NODE_BESE_API = 'https://blog.csdn.net/Web_chicken'

使用 Vite构建的Vue3项目,必须以 VITE_NODE 开头,否则不生效,或者请参考其他文章以暴露其他字符开头的环境变量

打包命令配置

//package.json
"scripts": {
    // 不设置mode的话 默认就是使用 .env 文件配置
    "dev": "vite --host",
    "build": "vite build",
    // 如需使用其他配置文件 在后边加上 --mode xxx 即可
    "build:prod": "vite build --mode prod",
    "preview": "vite preview"
  },

页面使用env环境变量

const env = import.meta.env

二次封装 axios

src目录下新建 utils文件夹,并在该文件夹下新建 request.js,用来封装 axios 请求

在这里插入图片描述

import axios from 'axios'; // 引入axios
import { showNprogress, hideNprogress } from '@/mixin' // 封装的 NProgress顶部进度条方法,可忽略
const baseURL = import.meta.env.VITE_NODE_BESE_API // 根据 env 配置文件获取 baseURL , 如果暂时不了解的话可以先设置
const baseURL = '/'

// 创建 axios 请求
const service = axios.create({
  baseURL
})

// 请求拦截器
service.interceptors.request.use(
  config => {
    showNprogress() // 进度条开始
    return config // return config
  },
  err => {
    hideNprogress() // 进度条关闭
    return Promise.reject(err)  // 进入 err return err
  }
)

// 相应拦截器
service.interceptors.response.use(
  res => {
    showNprogress()
    // res.status === 200 说明请求成功 反之失败
    if (res.status === 200) {
      hideNprogress()
      return res.data
    } else {
      hideNprogress()
      return Promise.reject(res.data)
    }
  },
  err => {
    console.log(err)
    hideNprogress()
    return Promise.reject(err)
  }
);
// 导出 service
export default service;

创建table.json接口,获取数据

在这里插入图片描述
public 目录为项目根目录,可通过 /table.json访问该文件

{
  "data": [
    {
      "id": 1,
      "date": "2016-05-03",
      "name": "admin",
      "address": "No. 189, Grove St, Los Angeles"
    },
    {
      "id": 2,
      "date": "2016-05-02",
      "name": "Tom",
      "address": "No. 189, Grove St, Los Angeles"
    },
    {
      "id": 3,
      "date": "2016-05-04",
      "name": "Tom",
      "address": "No. 189, Grove St, Los Angeles"
    },
    {
      "id": 4,
      "date": "2016-05-01",
      "name": "Tom",
      "address": "No. 189, Grove St, Los Angeles"
    }
  ]
}

api封装及使用

src目录下新建 api文件夹,并在该文件夹下新建 index.js,用来封装 api 请求

// 引入 axios 
import request from '@/utils/request'
// 封装获取列表数据的方法并导出
export const getTableList = () => {
  return request({
  	// 请求地址
    url: 'table.json',
    // 请求方式
    method: 'GET'
  })
}

使用api方法获取数据

<el-table :data="tableData" style="width: 100%" border stripe>
  <el-table-column v-for="{id,prop,label} in tableColumn" :prop="prop" :key="id" :label="label" :width="label=='序号' ? 100 :''" align="center" />
  <el-table-column fixed="right" label="操作" align="center" width="240">
    <template #default="scope">
      <el-button link type="primary" size="small" @click="handlEmodify(scope.row)">编辑</el-button>
      <el-button link type="primary" size="small" @click="handleDel(scope.row)">删除</el-button>
      <el-button link type="primary" size="small" @click="handlDetail(scope.row)">查看</el-button>
      <el-button v-if="scope.row.name==='admin'" link type="primary" size="small" @click="handleAdmin(scope.row)">管理系统</el-button>
    </template>
  </el-table-column>
</el-table>
// 别忘了在script标签加上 setup
import { ref, onMounted } from 'vue' // 导入 ref 生命周期函数
import { ElMessage } from 'element-plus' // 导入 Element Plus 消息提示
import { getTableList } from '@/api/home.js' // 导入接口 api

/**
 * @type data
 * @description 所有数据都在此体现
 * **/

const tableData = ref([]) // 在此定义 tableData ,并使用 ref 使其具备响应式

// 用来循环列表字段的,如字段固定可不结构为响应式
const tableColumn = ref([
  { id: 1, prop: 'id', label: '序号' },
  { id: 2, prop: 'date', label: '时间' },
  { id: 3, prop: 'name', label: '姓名' },
  { id: 4, prop: 'address', label: '地址' }
])

/**
 * @type 生命周期
 * @description 所有生命周期函数都在此体现
 * **/

onMounted(() => {
  // 在生命周期函数中调用初始化表格方法
  initTable()
})


/**
* @type methods
* @description 所有方法、事件都在此层中体现
* **/

// 初始化表格
const initTable = async () => {
  // 调用 api 方法,获取数据 并赋值给 tableData
  let res = await getTableList()
  ElMessage.success('获取成功')
  // 注意 使用 ref结构的数据 在 js中必须使用.value来设置或获取它的值
  if (res.data) return tableData.value = res.data
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL主从延迟的解决方案

1、MySQL主从延迟的解决方案 之前项目中基于 MySQL 主从复制以及 AOP 的方式实现了读写分离&#xff0c;也写了博客记录了这个实现过程。既然配置了 MySQL 主从复制&#xff0c;那么自然会存在主从延迟&#xff0c;如何尽可能减小主从延迟对应用系统的影响是很有必要的思考点&a…

特征工程原理(一)

一、定义 在机器学习原理中讲过机器学习的基本流程&#xff0c;其中很重要的一个环节就是特征工程。 1.1 基本概念 特征工程&#xff08;Feature Engineering&#xff09;&#xff1a;从原始数据中提取特征的过程&#xff0c;这些特征可以很好地描述数据&#xff0c;并且利用…

Showdoc升级版本记录

目录 Showdoc介绍 升级步骤 1.备份当前版本 2.下载安装最新版本 总结步骤&#xff1a; Showdoc介绍 ShowDoc是一个非常适合IT团队的在线API文档、技术文档工具。通过showdoc&#xff0c;你可以方便地使用markdown语法来书写出美观的API文档、数据字典文档、技术文档、在线…

GitHub创建仓库,使用SSH建立连接(github创建仓库,github使用SSH建立连接)

GitHub简介&#xff1a;GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;也是一个开源代码库以及版本控制系统&#xff0c;Github拥有超过900万开发者用户&#xff0c;已经成为了管理软件开发以及发现已有代码的首选方法。 怎样创建仓库并使用&#xff1f;详细操作步…

FTP错误代码

本文迁移自本人网易博客&#xff0c;写于2015年4月15日&#xff0c;FTP错误代码 - lysygyy的日志 - 网易博客 (163.com)1、12003错误指定用户未添加到有权限的组中&#xff1b;即指定用户没有权限。2、CFtpFileFind.FindFile GetLastError 12110 &#xff08;1&#xff09;当递…

对比学习综述

一 . 发展历程大概可以分为四个阶段 1、百花齐放&#xff1a;在这个阶段中&#xff0c;方法、模型、目标函数、代理任务都还没有统一&#xff0c;所以说是一个百花齐放的时代。 InstDisc&#xff08;instance discrimination&#xff09;CPCCMC 2、CV双雄&#xff1a;这个阶…

十六、xml、单元测试、注解、单例模式

xml 1.概述【理解】 万维网联盟(W3C) 万维网联盟(W3C)创建于1994年&#xff0c;又称W3C理事会。1994年10月在麻省理工学院计算机科学实验室成立。 建立者&#xff1a; Tim Berners-Lee (蒂姆伯纳斯李)。 是Web技术领域最具权威和影响力的国际中立性技术标准机构。 到目前为止&…

新提案,初识CSS的object-view-box属性

在开发时&#xff0c;一直希望有一种原生的css方式来裁剪图片&#xff0c;并将其定位在我需要的任何方向。这可以通过使用一个额外的html元素和不同的CSS属性来实现&#xff0c;后面解释。在这篇文章中&#xff0c;将带领大家了解Jake Archibald在今年年初提出的新的CSS属性obj…

VisionBank AI实现4项技术突破----传统算法融合深度学习,重新定义“工业视觉检测大脑”

机器视觉经过长时间的发展&#xff0c;技术不断取得重大突破并被广泛应用&#xff0c;当前已遍布工业生产的各个环节。而且机器视觉易于实现自动化集成&#xff0c;软件集成&#xff0c;是实现智能制造的基础技术。据统计&#xff0c;中国的机器视觉市场需求近几年处于持续高速…

【目标检测】ROI Pool和ROI Align的区别

这里说一下ROI Pool和ROI Align的区别&#xff1a; 一、ROI Pool层 参考Faster RCNN中的ROI Pool层&#xff0c;功能是将不同size的ROI区域映射到固定大小的feature map上。 它的缺点&#xff1a;由于两次量化带来的误差&#xff1b; 将候选框边界量化为整数点坐标值将量化…

【Vue】后台管理系统

O 项目说明 1.脚手架 vitevue-cli 》 webpack 2.vite脚手架使用 官网&#xff1a;https://vitejs.cn/ Vue3 vite官网&#xff1a;https://cn.vitejs.dev/ Vite下一代的前端工具链&#xff0c;为开发者提供急速响应 # 安装 $ cnpm i vite -g $ vite -v vite/4.0.3 darwin…

Sentinel + Redis + Mysql + RabbitMQ 秒杀功能设计及后端代码实现

文章目录前言数据一致性高性能动静分离静态资源缓存流控缓存数据库消息队列RabbitMQ的优点高并发分布式锁后端代码实现中间件表结构添加依赖公共常量实体类Redission配置定时任务Controller下单接口付款接口接收通道消息完整代码前言 在开发秒杀系统功能的时候&#xff0c;需要…

MyBatis讲解,批量添加

一、批量添加 1.书写BookMapper 1.1先在navicat的新建查询里书写条件查询的sql语句 条件查询的sql语句 insert into book(book_name) values(三体); 1.2将sql语句复制到BookMapper里 用到foreach标签&#xff1b; collection&#xff1a;可以放数组&#xff0c;也可以放list集…

数据结构与算法-算法分析(2)

算法和算法分析 对于同一个问题可能由不同的算法。究竟来如何评价这些算法 一个算法首先要具备正确性&#xff0c;健壮性&#xff0c;可读性和有穷性&#xff0c;然后我们再比较其算法的效率&#xff0c;来评判算法的优劣。 主要从时间和空间上的效率进行评价算法&#xff0c…

对JSON的理解

什么是JSON? JSON全名是JavaSpript Object Notation。 JSON是轻量级的文本数据交换格式。 JSON是存储和交换文本信息的语法&#xff0c;类似XML,比XML更小&#xff0c;更快&#xff0c;更易解析。 JSON可以将Java对象转换为特殊格式的字符串&#xff08;JSON串&#xff09…

矿井水深度除总氮

工艺原理 选择性去除硝酸盐氮 项目背景 近年来高矿化度和含特殊组分矿井水逐年增多&#xff0c;以及环保政策的趋严给矿井水处理带来新挑战。 随着《水污染防治行动计划》 &#xff08;水十 条&#xff09;的深入开展和新的煤矿环境影响评价制度的执行&#xff0c;山西、陕…

CSS权威指南(三)特指度

文章目录1.特指度的定义2.继承3.层叠1.特指度的定义 ​ 我们都知道&#xff0c;当同一元素被设置了两个相同属性的时候&#xff0c;只会生效其中的一个属性值。至于到底生效哪一个属性值&#xff0c;自然是有一套计算规则的。在CSS中&#xff0c;选择符的特指度由选择符本身的…

模板学堂丨数据大屏配色设计指南

DataEase开源数据可视化分析平台于2022年6月正式发布模板市场&#xff08;https://dataease.io/templates/&#xff09;。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板&#xff0c;方便用户根据自身的业务需求和使用场景选择对应的仪表板模板&#xff0c;并…

[MySQL]-双主+keepalived实现高可用

[MySQL]-双主keepalived实现高可用 梁森 | 2023年1月 本文旨在记录学习主从时的拓展内容&#xff0c;怎么借助keepalived实现简单的高可用。 一、环境介绍 1.1 keepalived keepalived的作用是检测服务器的状态&#xff0c;若某一台服务器宕机&#xff0c;会通过VIP&#xff08;…

【人工智能】基于五笔字型规范和人工神经网络的简中汉字识别【六】

识别网络训练与测试 一、配置文件的修改二、修改训练模型参数三、训练自己的识别模型四、测试识别模型一、配置文件的修改 前期工作铺垫了这么久,终于可以正式进正题了。 训练目标检测模型需要修改几个文件,我们这里为了不破坏原本项目结构,采用在相同目录下复制一份不同名文…