vue3简单使用

12 篇文章 0 订阅
10 篇文章 0 订阅

一、前置

js按需导入需要的函数

在导入js文件时如果用 <script src="./showMessage.js"></script>导入的化会导入js中全部的东西,造成了额外的开销。下面介绍按需导入的使用

① 可以在被导入的js文件的函数前加入export
在这里插入图片描述
在使用时在这里插入图片描述
注意script的type要是module
如果嫌导入函数名字太长的话可以通过像python一样的as来指定别名
import {simpleMessage as sm} from "./showMessage.js"


② 如果需要在js中导入多个函数的话,可以采用批量导入的方法在这里插入图片描述

调用方法和上面一样没有改变


③ 上面的方法在使用时需要写很多个函数名,十分麻烦,就可以在批量导入的时候加一个default关键词,这样就可以把js中需要的函数当成是一个包来使用
js代码
在这里插入图片描述
调用
在这里插入图片描述

二、ajox

官网

Axios 对原生的Ajax进行了封装,简化书写,快速开发

1. 导入

这里关注在vue中如何使用axios
首先就是先得安装axios,这不步骤官方提供了
在这里插入图片描述
如果使用npm安装的话还需要导入在这里插入图片描述
安装完会出现在node_modules文件下面

<script setup>

import axios from 'axios'

2. 基本使用

在这里插入图片描述
当然传入的参数也可以包含在axios的参数中(以json格式传入数据)
在这里插入图片描述
POST请求格式为

// 发起一个post请求
axios({
  method: 'post',
  url: '/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
}).then(result=>{
            //成功的回调
            //result代表服务器响应的所有的数据,包含了响应头,响应体. result.data 代表的是接口响应的核心数据
            console.log(result.data);
        }).catch(err=>{
            //失败的回调
            console.log(err);
        });

以上的写法是直接向axios中进行配置,当然还有简单的写法。就是直接用axios.请求方式(url,其他配置),别名方式调用

    //别名的方式发送请求
   axios.get('http://localhost:8080/article/getAll').then(result => {
      //成功的回调
      //result代表服务器响应的所有的数据,包含了响应头,响应体. result.data 代表的是接口响应的核心数据
      console.log(result.data);
  }).catch(err => {
      //失败的回调
      console.log(err);
  }); 

如果存在参数
在这里插入图片描述
其他的请求方式也是同理
请求方法的配置参数可以在源码中找到在这里插入图片描述

在这里插入图片描述
含义参看axios官网

3. 默认配置

全局默认配置

axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

经过以上的配置之后,所有的axios的请求baseURL都是https://api.example.com

创建时配置

axios.create(配置信息)

const instance1 = axios.create({baseURL:'https://api.example.com'});
instance1.defaults.headers.common['Authorization'] = 'AUTH_TOKEN';

究极偷懒写法

这里的baseURL实际上可以省略很多直接写成{baseURL:"/api"}也是可以的,因为框架会自动帮我们拼接上我们请求的baseurl(也就是vue运行的url)
在这里插入图片描述

const instance1 = axios.create({baseURL:"/api"});
instance1.defaults.headers.common['Authorization'] = 'AUTH_TOKEN';

上面说的是配置实际上是调用create创建了axios的对象,可以调用对象的对应请求方法发起请求

instance1.get('/article/getAll')
    .then(result => {return  result.data})
    .catch(err => {console.log(err)})

在浏览器可以查看到具体的URL
在这里插入图片描述

4.拦截器使用

在每次axios响应后都需要写对应的then和catch方法进行处理,十分麻烦。

为了减少开发代码量,axios提供了拦截器来对请求进行处理。会在调用then和catch方法之前对结果进行处理
在这里插入图片描述

响应拦截器

使用方法

//创建axios实例
const instance1 = axios.create({baseURL:"/api"});

//配置拦截器  实例.interceptors.response.use(成功处理方法,失败处理方法)
instance1.interceptors.response.use(
    result => {return  result.data},
    err => {console.log(err); return Promise.reject(err)}

)

使用响应拦截器处理响应结果
在这里插入图片描述
拦截器会在调用then和catch方法之前对结果进行处理
验证
在这里插入图片描述
可以看到控制台输出的是data的数据,而不是整个请求
在这里插入图片描述
当然在接收到正常返回值的响应,但是不符合我们要求的也可以把请求置为失败状态
在这里插入图片描述

请求拦截器

拦截器发送在请求发起之前,可以为请求配置统一的信息,如需要在请求头中加入taken的信息
在这里插入图片描述

在这里插入图片描述

5. axios等待数据获取问题

参看关于axios同步获取数据的问题

6. ⭐跨域问题

在这里插入图片描述

在axios中经常出现这个问题

原因:由于浏览器的同源策略限制,向不同源(不同协议、不同域名、不同端口)发送ajax请求会失败在这里插入图片描述

解决方案就是通过前端服务器代理转发我们的ajax请求在这里插入图片描述

(1) 把baseURL换成极简的

在这里插入图片描述

(2) 添加代理配置

找到vue的配置文件vite.config.js在这里插入图片描述
defineConfig字段下配置如下信息

在这里插入图片描述
完整的配置文件

import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { proxyRefs } from 'vue'
import path from 'node:path'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  },
  server:{
    proxy:{
      '/api':{
        target:"http://localhost:8080",
        changeOrigin: true,
        rewrite:(path) => path.replace(/^\/api/,'')
      }
    }
  }
})

三、 element组件库

Element Plus官网
使用这个库主要是要复制官网组件,修改模板,绑定事件

1. 安装

安装方式主要以官网介绍的为主
npm安装方式
npm install element-plus --save

2. 导入方法

这里是vue工程,导入element的方法和导入vue的方法差不多
在这里插入图片描述

3. 使用方法

导入包之后就可以去官网找自己需要的组件,复制代码到自己的项目里面进行修改和绑定事件了。

在这里插入图片描述

在这里插入图片描述
运行结果
在这里插入图片描述
可以看到网页结构就是官网的样子
但是,他文体默认的都是英文的,需要进行转换

问题

① 语言转换

没有配置时的分页条组件
在这里插入图片描述
配置中文,需要在main.js文件中引入语言包
在这里插入图片描述
效果
在这里插入图片描述

② 表单校验

表单的数据输入时需要进行校验,如两次密码输入要一直,数据长度字符限制等问题

在这里插入图片描述
校验上面的表单

a. 参照官网写校验规则

基础校验规则

在这里插入图片描述

自定义校验

自定义校验需要自己实现validator传入的函数
在这里插入图片描述
在校验规则中绑定
在这里插入图片描述

b. 校验规则的使用

① 首先得先在表单中指定用的的规则,并绑定校验数据
注意,在表单上一定要记得绑定 :model属性
在这里插入图片描述

② 在每个需要校验的项中添加prop属性指定校验规则
在这里插入图片描述

⭐坑(表单提交时的校验)

element提供的校验只是个提示校验,意思就是他只是给你个提示,但并不会约束到数据本身
比如上面的代码,我已经添加了校验准则
在这里插入图片描述
在这里插入图片描述
这里的请求里面并没有再出输入密码的数据。
在这里插入图片描述

解决

其实上面的操作只是对单个数据进行了校验,并没有对整个表单进行校验,这就会导致即使校验不通过还是能发起请求

这时就需要对表单提交的进行处理,并通过一个标志位来控制校验是否通过,通过则发起请求。
但是这种方法存在线程同步问题
在这里插入图片描述
这里索性直接就把校验函数和发起请求的写在一起,校验成功直接发送请求

引入相关东西

在这里插入图片描述

定义表单的ref和表单提交的校验函数

在这里插入图片描述

绑定表单提交按钮

在这里插入图片描述
到处完成了表单校验

总结

表单是校验一定要配合数据校验和表单校验一起使用,不然会出现明明数据格式都不符合还能发起请求的问题。

③ 文件上传

文件上传的标签是el-upload
需要属性为
action:必须要。调用的后台文件上传的路径(存在跨域问题
name:上传的文件字段名,默认为file
headers:请求头的配置
on-success:上传成功后的回调函数

在这里插入图片描述
回调函数的内容实际上跟编写的代码有关,还和拦截器处理有关
在这里插入图片描述

④ 下拉菜单使用

在这里插入图片描述
在这里插入图片描述
点击后的处理函数
在这里插入图片描述

四、vue3

在网站上动态渲染任意 HTML 是非常危险的,因为这非常容易造成 XSS 漏洞。请仅在内容安全可信时再使用 v-html,并且永远不要使用用户提供的 HTML 内容。
vue的入门使用比较简单,而且东西比较多,用到的时候去官网查看
vue3官网
官网提供了很好的教程
练习

vue3项目的工程创建

vue3创建需要使用到node.js(版本在16及其以上),

在这里插入图片描述

解释
在这里插入图片描述

执行上面给出的3条绿色指令

在这里插入图片描述
在这里插入图片描述
然后访问上面给出的Local里的网站,如果出现下面的页面就成功了

在这里插入图片描述
生成项目的项目结构
在这里插入图片描述

vue3 的工程化开发

代码区介绍

在这里插入图片描述
从代码中可以看出,默认首页中的id为app的div挂载到vue上,由vue接管,vue传入的参数是根组件,这个根组件实际上就是网页的具体内容。
所以我们的代码主要是写在这个根组件上

每个vue文件可以分为三个部分

.vue是Vue项目中的组件文件,在Vue项目中也称为单文件组件(SFC,Single-File Components)。Vue 的单文件组件会将一个组件的逻辑 (JS),模板 (HTML) 和样式 (CSS) 封装在同一个文件里(.vue) 。

在这里插入图片描述

整理项目结构

  • 删除components下面自动生成的内容
  • 新建目录api(存方法),utils(存服务工具),views(存vue页面)
  • 静态文件放在assets文件夹下面
  • 删除App.vue中自动生成的内容

在这里插入图片描述
在这里插入图片描述

问题

1. post请求参数格式

请求参数格式:x-www-form-urlencoded

export const userRegisterService = (registerData)=>{
    return request.post('/user/register',registerData);
}

以上方法传的是json,要把格式变为x-www-form-urlencoded,可以利用UrlSearchParams对象

export const userRegisterService = (registerData)=>{
    //借助于UrlSearchParams完成传递
    const params = new URLSearchParams()
    for(let key in registerData){
        params.append(key,registerData[key]);
    }
    return request.post('/user/register',params);
}

2. 路由使用

路由在vue中主要是用来处理页面跳转的,哪个访问路径该显示那个组件

① 安装
npm install vue-router@4
② 创建路由

路由在工程里面需要放在src/router下面
在这里插入图片描述

③ 导入路由

需要在mian.js入口文件中引入路由
在这里插入图片描述

④ 在组件中调用路由

在这里插入图片描述
这样就可以实现根据路径跳转到不同的组件页面

= 使用路由实现登陆跳转到主页

登陆操作是在Login.vue组件中,要使用路由进行跳转,那么需要先获取路由,然后使用路由的push方法进行跳转
在这里插入图片描述


以上是在组件中使用路由
在js文件中导入路由的操作和组件中有所不同
在这里插入图片描述

3. 子路由

子路由就是相当于访问路径的拼接

① 引入

子路由的定义需要在父路由的映射规则下面的指定children属性来定义子路由,子路由的映射格式和父路由的格式是一样的,都是一个数组[ ]。里面定义path和component。[{path1:路径1, component: 组件1},{path1:路径2, component: 组件2}]

在这里插入图片描述
这样关系图就变为
在这里插入图片描述

子路由的使用方法和路由是一样的。
这里介绍一下如何在element的meau组件中点击对应菜单显示对应组件
首先要知道通过路由点击,实现跳转如何来展示组件,展示的地方是由于<router-view>标签位置决定的,我们通过路由改变的是<router-view>所在位置。
在这里插入图片描述
在这里插入图片描述
展示标签写好了就需要给meau绑定跳转了,绑定是通过el-menu-item标签的属性index实现的
当然要使用index需要先开启router
在这里插入图片描述
实现
在这里插入图片描述

4. pinia:Vue的专属状态管理库可以用于管理taken

Pinia是Vue的专属状态管理库,它允许你跨组件或页面共享状态。

pinia官网
在这里插入图片描述
可以通过状态来实现全局变量的管理

① 安装

通过命令行npm install pinia即可安装pinia

② 引入

需要的入口文件main.js中引入pinia
在这里插入图片描述

③ 定义pinia状态

对于需要定义的状态,一般存储在src/stores文件夹下面,这里建立了src/stores/taken.js
在这里插入图片描述

定义完记得通过export导出给外部使用

import {defineStore} from "pinia";
import {ref} from "vue";

// 状态的命名一般是 useXXXStore
export const useTakenStore = defineStore('taken', ()=>{

    // 定义taken数值
    const taken = ref('');

    // 设置taken的值
    const setTaken = (newTaken) =>{
        taken.value = newTaken;
    }

    //  移除taken
    const removeTaken = () => {
        taken.value = ''
    }

    return {taken, setTaken, removeTaken}
})
④ 状态的获取使用

使用状态来存储taken,在登陆成功的时候调用操作集合里面的函数来对数据进行操作
在这里插入图片描述
在需要使用到taken的地方需要取出taken,如获取文章分类列表时需要取出taken,放到请求头上
在这里插入图片描述

虽然在定义时,状态定义为了响应式的对象,但是在外边得到的状态数据不是响应式的,不需要用.value来获取值
这里取出taken放入请求头的操作,并不是只要这个操作需要,有很多地方都需要把taken放入请求头中,可以添加请求拦截器来实现这个操作,减少代码重复。
具体参看二、axios的拦截器部分

解决pinia持久化问题

pinia的状态是存储在内存的,当浏览器刷新页面,pinia存储的状态就没了,所以需要对pinia的状态进行持久化

a. 安装

npm install pinia-persistedstate-plugin

b. 导入

需要在入口文件main.js中导入插件,并让pinia对象使用这插件
在这里插入图片描述

c. 配置

在定义pinia对象时,设置persit属性,开启持久化(因为状态可能不只一个,所以需要设置persit属性来确定那些需要进行持久化)
在这里插入图片描述

参考

  1. axios官网
  2. Element Plus官网
  3. vue官网
  4. pinia官网
  5. 路由官网
Vue3中简单使用axios的步骤如下所示: 1. 首先,需要导入VueaxiosVueAxios这三个库。可以使用以下代码进行导入: ``` import Vue from 'vue' import axios from 'axios' import VueAxios from 'vue-axios' Vue.use(VueAxios, axios) ``` 2. 接下来,我们将使用axios实例,将其单独编写为一个js文件。你可以选择将该文件放在src/plugins/文件夹中,命名为axiosInstance.js。在该文件中,我们需要导入axios,并使用axios的create([config])方法创建一个axios实例。config参数是axios的基本配置信息,其中包括baseURL和timeout等。以下是一个示例代码: ``` import axios from 'axios' const API = axios.create({ baseURL: 'http://localhost:8080', // 请求后端数据的基本地址,根据实际情况进行修改 timeout: 2000 // 请求超时设置,单位ms }) export default API ``` 以上是Vue3中简单使用axios的步骤。通过以上步骤,你就可以在Vue3中使用axios进行网络请求了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [vue3中使用axios](https://blog.csdn.net/qq_43647821/article/details/123127824)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Vue 03-Axios使用详解](https://blog.csdn.net/weixin_57519357/article/details/127209328)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuming先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值