当前位置: 首页 > news >正文

【Vue】第五篇

Vue学习第五篇

  • 1. Vue引入第三方
  • 2. Axios网路请求
    • 2.1 axios基本实现
    • 2.2 Axios网络请求封装
    • 2.3 网络请求跨域解决方案
  • 3. Vue引入路由配置
    • 3.1 Vue引入路由基本实现
    • 3.2 路由传递参数
    • 3.3 嵌套路由配置
  • 4. Vue状态管理(Vuex)
    • 4.1 Vuex基本实现
    • 4.2 Vue状态管理核心(Vuex)
  • 5. Vue3新特性
  • 6. Vue3加载Element-Plus
    • 6.1 全局引入和按需引入
    • 6.2 引入Element-plus字体图标

1. Vue引入第三方

第三方:不属于Vue但是在Vue中能直接使用的,最常用的就是轮播图
故本节以轮播图为例。

一个优秀的框架,是否决定它优秀,也要看它的第三方是否足够多。

轮播图:
在这里插入图片描述

温馨提示:
在Vue中使用Swipper:在这里插入图片描述
Swiper官方网址:https://swiper.com.cn

不止轮播图,还有很多好的第三方(Vue2官网有)
在这里插入图片描述
点击进入:
在这里插入图片描述

下面,我们来介绍轮播图的使用。

①安装
在这里插入图片描述
在vscode终端输入npm i --save swiper
在这里插入图片描述

②基本实现
在这里插入图片描述

实操:
在这里插入图片描述

效果:
在这里插入图片描述

③添加指示器
在这里插入图片描述

注意:Swiper 在v10及以上版本中,将导航、分页等模块的导出路径调整到了 swiper/modules 目录下,不再直接从 swiper 根目录导出。

import { Pagination } from 'swiper/modules';

最终效果:
在这里插入图片描述

2. Axios网路请求

2.1 axios基本实现

Axios网络请求是一个基于promise网络请求库

(1)安装
同样,它也是第三方,我们先进行安装。

在这里插入图片描述
vscode终端输入npm i --save axios
在这里插入图片描述

(2)引入
在这里插入图片描述

①组件中引入—get版

在这里插入图片描述

<script>
import axios from 'axios'export default {name: 'HelloWorld',mounted() {axios({method: "get",url:"http://iwenwiki.com/api/blueberrypai/getChengpinDetails.php"}).then(res => {console.log(res.data);})}
}
</script>

讲解:
mounted是Vue的生命周期钩子函数,当组件的DOM元素被渲染到页面上后,会自动执行中国函数里的代码。通常会在mounted中发送请求,因为此时组件已经“准备就绪”,可以操作DOM或处理数据了。
(created也可以,但此时还不可操作DOM)
method写请求方式,url写请求的接口地址
③因axios是基于promise实现,所以用.then()来处理“请求成功”的情况(如果请求成功,则执行这里的代码)
res是接口返回的“响应对象”。
在这里插入图片描述

效果:
在这里插入图片描述

在页面中显示数据
在这里插入图片描述

我们先来看接口数据的格式:
在这里插入图片描述

实操:
在这里插入图片描述

页面效果
在这里插入图片描述

②组件中引入—post版

代码
在这里插入图片描述

    //post请求方式axios({method: "post",// 提交登录信息(提交数据)url:"http://iwenwiki.com/api/blueberrypai/login.php",data: {user_id: "iwen@qq.com",password: "iwen123",verification_code: "crfvw"}}).then(res => {console.log(res.data);})

但是拿到的数据是不对的
在这里插入图片描述

因为网络请求接收参数的类型,并不是对象类型,而是字符串类型,所以要将data的数据类型转为字符串类型
在这里插入图片描述

在vscode终端输入npm i --save querystring
在这里插入图片描述

实操:
在这里插入图片描述

效果:
在这里插入图片描述

③快捷方案
在这里插入图片描述

接下来来讲全局引入

在这里插入图片描述

①先在main.js中导入axios,创建app实例并挂载Axios
在这里插入图片描述

②在Vue组件中使用
在这里插入图片描述

2.2 Axios网络请求封装

在日常应用过程中,一个项目中的网络请求会很多,此时一般采取的方案是将网络请求封装起来

src下创建utils文件夹,在其之下创建request.js

我们先导入axios,创建一个instance实例对象,最后导出。
通过axios的create方法创建一个自己的网络请求对象
在这里插入图片描述

其中,拦截器是最常用的。
我们在发送网络请求之前获取到网络请求给我们返回的数据之前
都可以需要把这个请求给拦截一下,一些额外的处理

interceptors:拦截器对象
request:发送
use:方法
instance.interceptors.request.use处理拦截器
function:需要有成功的函数、失败的函数
在这里插入图片描述

补充:js的对象解构赋值
const response = error.response;
// 传统方式:通过 . 语法获取
而使用解构赋值,写法更简洁
const { response } = error;
// 解构赋值:直接从 error 中提取 response 属性

在这里插入图片描述

const errorHandle = (status, info) => {switch (status) {case 400:console.log("语义有误");break;case 401:console.log("服务器认证失败");break;case 403:console.log("服务器拒绝访问");break;case 404:console.log("地址错误");break;case 500:console.log("服务器遇到意外");break;case 502:console.log("服务器无响应");break;default:console.log(info);break;}
}

errorHandle函数包含sitch对于各种状态码的监听
用于传递状态码信息status、具体错误信息info

注意:学习时,网站axios看云的文档比较清晰

封装结束之后,就可以直接使用了。
但是使用方式不像我们之前那样直接在组件中写。

①创建一个api文件夹,创建两个文件,
path.js/base.js以及index.js
(utils内的request.js只是网络请求的方法

path.js统一管理接口地址,让代码更整洁、更容易维护
若接口地址改变,只改 path.js 里的配置,不改组件。

index.js定义具体接口的请求方法,简化组件代码
组件里不用关心接口 URL 是什么,只需要调用 如api.getChengpin() 这个方法就行。

utils/request.js写统一调用一个网络请求的解决方案
api/path.js写众多路径,
api/index.js写众多的网络请求方法,都可以放在一个文件里面。

实现逻辑分离:把 “怎么发请求”(utils/request.js)、“请求哪里”(api/path.js)、“具体哪个接口”(api/index.js)拆分开,代码更清晰。

utils/request.js 是 “网络请求的方法”,因为它的核心作用是封装网络请求的逻辑和工具函数,提供了一套可复用的 “方法” 来处理前端与服务器的通信,本质是对 axios 的 “方法封装”(基于axios二次封装)
它规定了网络请求的 “规则和方式”—— 比如用什么工具发请求、请求格式是什么、遇到错误怎么处理等,相当于给 “发请求” 这件事定了一套标准流程。
在这里插入图片描述

②path.js内创建base变量(定义一个配置对象)
把所有的路径都写入,并导出对象base

baseUrl:公共路径
chengpin:具体接口的路径
请求诚品数据
在这里插入图片描述
它们两个一拼就是完整地址,为何要分开呢?
因为 baseUrl是所有接口的公共前缀(基础域名)。

③index.js引入axios、path.js
在里面定义一个api对象,并导出api对象
定义具体接口获取网络请求的方法
在这里插入图片描述

④组件中使用
在这里插入图片描述

2.3 网络请求跨域解决方案

“网络请求跨域” 是浏览器的一种安全限制机制(称为 “同源策略”)导致的现象
简单说:当一个网页面对另一个不同 “源” 的服务器发送请求时,浏览器会阻止这个请求,这就是跨域。
在这里插入图片描述
在这里插入图片描述

如下图所示
在这里插入图片描述

解决方案(我们主要针对前台处理)
在这里插入图片描述

实操①:
在这里插入图片描述
写入协议、域名、(端口,默认可不写)

实操②:Vue组件中,删除前面的公共前缀(处理过的)
在这里插入图片描述

3. Vue引入路由配置

3.1 Vue引入路由基本实现

路由的作用:管理页面之间的关系,如页面间的跳转
(以前使用href标签进行跳转)

传统href是 “多页应用” 的跳转方式,通过重新加载页面实现跳转,体验和性能较差。
前端路由是 “单页应用” 的核心,通过切换组件实现无刷新跳转,解决了href的痛点,支持复杂交互和状态管理。
在这里插入图片描述
在这里插入图片描述

如果创建项目的时候,选中Router,则会集成该功能在里面。
在这里插入图片描述

vue-router文档学习入口
在这里插入图片描述

①安装
在这里插入图片描述

配置独立的路由文件
创建router文件夹,下设index.js文件
在这里插入图片描述

导入创建路由的两个核心工具,创建路由实例对象
在这里插入图片描述

创建两个页面,引入到index.js当中。
在这里插入图片描述

定义路由规则创建一个数组,来承载两个页面的配置,
每个配置是个对象类型
在这里插入图片描述
path:希望通过什么样的路径去访问它
component:对应的组件

配置数组需要扔到路由的对象当中以及history访问方式
然后导出对象router
在这里插入图片描述

引入路由到项目中
在主入口文件main.js引入
在这里插入图片描述
在这里插入图片描述

指定路由显示出口
在这里插入图片描述
App.vue中写上路由的显示出口router-view
在这里插入图片描述

指定路由跳转
这里是在App.vue中写
在这里插入图片描述
实操:
在这里插入图片描述

效果:
点击首页,路由跳转到/,显示首页
点击关于,路由跳转到about,显示关于页面
在这里插入图片描述

跳转时不会刷新整个页面,只会替换页面中router-view标签的内容(这就是单页应用的无刷新体验)

补充说明
路由模式在这里插入图片描述

createWebHistory基于HTML5的history.pushState()API实现。当用户通过前端导航(如点击按钮)跳转时,路由会通过pushState()修改URL,并手动渲染对应组件,不会向服务器发送请求,因此不会有问题。
但当用户直接在浏览器地址栏输入网址并回车,或刷新页面,浏览器会认为这是一个新的页面请求,会直接向服务器发送请求,如果后端没有配置/about这个路径的处理规则,则会默认返回404错误。(因为后端根本没有about.html这个文件)
实际上,我们需要服务器无论收到说明路径的请求,都返回单页应用的入口文件index.html,让前端路由接手处理URL并渲染对应组件。

后端重定向的作用:将所有前端路由路径的请求都重定向到index.html
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 路由传递参数

跳转的是同一个页面,怎么让它显示不同的数据
——根据某一个参数来进行处理
在这里插入图片描述

创建一个新闻页面,引入路由参数配置,App.Vue上显示在这里插入图片描述
在这里插入图片描述在这里插入图片描述

补充:异步加载方式:如果这个页面没有被显示出来,这个代码是不会被执行的

如果我们把所有的页面都在顶部引入进来了,
那么这个组件不管有没有被引用,都会被加载引入进来,
这样一来,如果页面多内容多则容易造成卡顿。
在这里插入图片描述

所以说我们一般除了首页会在这顶部直接引入之外,
剩下的页面都会使用异步加载方式引入。
这可以让首页的加载速度更快一些。
(有很多项目对于首页的加载速度是有要求的,
比如,百度的搜索引擎)

接下来,进入正文

在路由配置中指定参数的key
在这里插入图片描述
这里指定key为name
在这里插入图片描述

在跳转过程在携带参数
在这里插入图片描述
在这里插入图片描述

在详情页面读取路由携带的参数
在这里插入图片描述
在这里插入图片描述

3.3 嵌套路由配置

有两个导航
在这里插入图片描述

①创建子路由要加载显示的页面
在这里插入图片描述

②在路由配置文件中添加子路由配置
在这里插入图片描述

③指定子路由显示位置
在这里插入图片描述

效果:
在这里插入图片描述
在这里插入图片描述

④添加子路由跳转链接
在这里插入图片描述

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

但是一般都是默认显示第一个
(即点击About,显示其子组件内容,
并默认显示关于我们的内容)

⑤重定向在这里插入图片描述
在这里插入图片描述

4. Vue状态管理(Vuex)

4.1 Vuex基本实现

状态管理,可以简单理解为,组件与组件之间的数据管理
在这里插入图片描述
简言之,集中式管理,任何组件都可以按照指定的方式进行读取和改变数据
在这里插入图片描述
从前只能父子之间通信
在这里插入图片描述

①安装
在这里插入图片描述
在这里插入图片描述
同理,也可以像路由一样直接导入
在这里插入图片描述

手动配置则如下图所示:
在这里插入图片描述

可查阅官方文档
在这里插入图片描述

②配置Vuex文件
创建新文件夹store,在其之下创建index.js文件
在index.js文件内写入如下内容:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

③在主文件中引入Vuex
在这里插入图片描述

④在组件中读取状态
在这里插入图片描述

4.2 Vue状态管理核心(Vuex)

Vuex最重要的点——可以对这些数据进行同步地修改
即组件遵循一种规则,然后按这种规则去修改Vuex中的数据,其他组件都可以同时得到响应。
在这里插入图片描述

补充:内层是HelloWorld,vue,外层是App.vue
在这里插入图片描述

①Getter
对Vuex中的数据进行过滤:对读取的方式提供一种更合理的方式。
state里的数据可能不是页面想要,所以增加getters对数据进行过滤。
在这里插入图片描述
Getters内定义方法对数据进行处理。

过滤后读取:

法一:
在这里插入图片描述
法二:
(p标签要写上)
在这里插入图片描述

结果是显示:count=数据异常

Vuex不仅可以读取数据,还可以修改数据。

使用②Mutation更改数据:
在这里插入图片描述
定义方法来进行数据修改,默认state为第一个参数。

实操:通过Mutation里的方法来更改Vuex中的数据
在这里插入图片描述

组件中调用
在这里插入图片描述

效果
在这里插入图片描述
点击增加后:
在这里插入图片描述

还有个优势就是,任何对count所引用的组件,都会得到相应的变化

在About页面组件也显示count
(用getters是因为需要处理后的数据,正常state也可)

实操
在这里插入图片描述
主页面增加到count=6:
在这里插入图片描述
about页面的count也一样到6了:在这里插入图片描述

还可以传递参数
在这里插入图片描述
在这里插入图片描述

效果
在这里插入图片描述
点击添加后
在这里插入图片描述

当然,这种方式调用起来比较麻烦,Vuex还提供了一种快捷方案:
在这里插入图片描述

实操
在这里插入图片描述
点击增加按钮后,
在这里插入图片描述

③Action,可异步
在这里插入图片描述
Action和Mutation是一个意思,但不同的是Mutation内只允许同步操作,不允许异步操作。
提交数据,Action也是把数据提交给Mutation,Mutation再去更改

外部调用asyncAddCounter方法而不再是addCounter
数据来源于网路请求,也不再来源于页面中自己传递。
在这里插入图片描述

补充知识点:对象解构赋值
// 解构赋值的过程等价于:
const commit = context.commit;
在这里插入图片描述

页面调用补充知识点:
在这里插入图片描述

效果:
查看后端API接口
在这里插入图片描述
前端页面显示:本来是1,点击异步增加变为1011
在这里插入图片描述

同样,它也有快捷方案
在这里插入图片描述

5. Vue3新特性

Vue2到Vue3,是版本的升级。
相当于微信5.0到6.0
在这里插入图片描述

Vue3的六大亮点
在这里插入图片描述
Vue的底层源码,以前是用JS写的,现在改成了TS。

新特性1:ref和reactive

新特性2:setup,方法与变量写入其中(data和methods)
以前是拿取data的数据,现在是直接在setup中声明,且使用的是ref和reactive
在这里插入图片描述

日后在setup中所声明的变量,外部想访问,都必须return
在这里插入图片描述

效果:
在这里插入图片描述

一般我们用reactive声明对象类型的数据,
或者复杂数据类型的数据
在这里插入图片描述
修改:定义一个方法修改
在这里插入图片描述

效果:
在这里插入图片描述
按下按钮后
在这里插入图片描述

新特性3:props组件传递数据,context是当前对象
在这里插入图片描述

实操:
在这里插入图片描述
子组件,setup接收数据(props要定义)
在这里插入图片描述

console.log(props.msg)则打印“数据”

setup中没有this关键字,
如果想获取当前实例对象,使用ctx,即context
在这里插入图片描述
控制台:
在这里插入图片描述
emit自定义事件
attrs属性
slots插槽

新特性4:setup中使用生命周期函数
在这里插入图片描述
在这里插入图片描述

实操:
在这里插入图片描述

优势:同一个生命周期函数可以存在多个。

为什么是优势?

因为生命周期的使用频率很高,日后很多业务都会放在这个生命周期函数当中。
如果把特别多的业务都放在同一个内,后续整理起来会比较乱。
但是如果是一个函数放一个业务,拆分多个业务便会很清晰。
在这里插入图片描述

新特性5:Provide/Inject
关于组件间的数据传递。
下文的,Vue2也有,只是Vue2的时候很少有人用。
Vue3时候,这个东西得到了增强,所以Vue3的使用率高一些。
在这里插入图片描述
在这里插入图片描述

实操
在这里插入图片描述

在这里插入图片描述

必须由上至下
中间再多几层组件也可。
Provide/Inject:跨任意层级传递, 可以实现祖先组件 → 任意深层后代组件的数据传递,无需中间层组件转发。
祖先组件用 provide 提供数据,任意后代组件用 inject 接收,直接跳过中间层。
Provide/Inject 的传递关系是隐式的:祖先组件提供数据时,不需要知道哪些后代会使用;后代组件接收时,也不需要知道数据来自哪个祖先,只能通过约定的key关联。

新特性6:Fragment在这里插入图片描述
实操
在这里插入图片描述

6. Vue3加载Element-Plus

6.1 全局引入和按需引入

Element组件库针对Vue2,Element-Plus组件库针对Vue3
在这里插入图片描述

①安装
在这里插入图片描述

②全局引入
在这里插入图片描述
实操:
在这里插入图片描述

③使用
在这里插入图片描述
复制element-plus的组件代码
在这里插入图片描述
实操1:按钮
在这里插入图片描述
效果:
在这里插入图片描述

实操2:switch开关按钮
在这里插入图片描述
实操:
在这里插入图片描述
注意,它的语法是用TS写的,我们需要把它改为JS
在这里插入图片描述
如下:
在这里插入图片描述
效果:
在这里插入图片描述
所有组件安装官方文档方式复制使用即可。

④按需引入
在这里插入图片描述
在这里插入图片描述
复制下来,并写到vite.config.js中
在这里插入图片描述
最后一步,同全局引入
在这里插入图片描述

6.2 引入Element-plus字体图标

字体图标需要额外安装

①安装
在这里插入图片描述

②全局注册
在这里插入图片描述

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

④使用
在这里插入图片描述

http://www.dtcms.com/a/593077.html

相关文章:

  • 联合索引的最左前缀原则与失效场景
  • solidity中的抽象合约
  • 去中心化铸就价值基石:CVC与BTC引领区块链投资新范式
  • 微美全息(NASDAQ:WIMI)基于边缘云计算与区块链的数据缓存算法,引领数据管理变革
  • K8S RD: Kubernetes核心概念与故障排查全解析
  • 响应式网站手机端广州网站建设商城建设
  • 第三方应用软件提权之vnc提权
  • iOS 跨平台开发实战指南,从框架选择到开心上架(Appuploader)跨系统免 Mac 发布全流程解析
  • 【Go】并发编程的核心思想 CSP 模型
  • 《Vue项目开发实战》第四章:组件封装--ToolBar
  • Redis拒绝策略
  • iphone Delta模拟器如何从夸克网盘导入游戏ROM 附游戏资源下载
  • 专业网站建设平台网站建设功能评估表
  • 做农业网站怎么赚钱58同城北京网站建设
  • 如何在命令行中调用Dev-C++的编译器?
  • C语言自定义类型:联合体与枚举
  • 在线网站推广工具WordPress 付费下载阅读
  • Windows2008 如何禁用FSO?
  • 了解一下LSTM:长短期记忆网络(改进的RNN)
  • 【微服务 - easy视频 | day03】服务与服务之间的调用
  • 网站建设定做mvc网站建设的实验报告
  • CMP(类Cloudera CMP 7 404版华为Kunpeng)告别CDH/CDP,拥抱自主可控的新时代
  • 生成ios钱包pkpass文件
  • Paimon——官网阅读:理解文件
  • 做网站应该学什么语言网站建设裕鸿国际
  • Xenium数据分析 | 使用Xenium Ranger重新分析数据
  • MySQL 8.0 新特性详解:窗口函数,开启数据分析的潘多拉魔盒
  • 基于模板匹配的数字和大写字母识别(Matlab)
  • 网站编程赚钱企业门户网站 php
  • 网站有什么到期网站空间哪里买