欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 一天搞定Vue3——包含Axios、ElementUI Plus、Vuex的使用!!!

一天搞定Vue3——包含Axios、ElementUI Plus、Vuex的使用!!!

2024/10/24 11:19:26 来源:https://blog.csdn.net/qq_65034569/article/details/141166942  浏览:    关键词:一天搞定Vue3——包含Axios、ElementUI Plus、Vuex的使用!!!

    前言,本篇文章是依据bilibili博主(波波酱老师)的学习笔记,波波酱老师讲的很好,很适合速成!!!
在这里插入图片描述

    本篇文章会与vue2进行对比学习,并且也有很多的JavaScript知识点,要提前掌握他们才能学的效果更佳,见效更快。🥳

文章目录

  • Vue基础
    • Vue的底层原理
    • el挂载点
    • data数据对象
    • methods方法
  • 指令
    • v-text
    • v-html
    • v-on
    • v-show
    • v-if
    • v-bind
    • v-for
    • v-model
      • 其他指令
      • 自定义指令
  • 事件和属性
    • 事件修饰符
    • 计算属性
    • 侦听属性
      • 深度侦听
      • 过滤属性
  • 生命周期函数
  • 组件
    • 组件创建和使用
    • 全局组件
    • 父子组件
    • 单文件组件
      • 组件通信
      • 子组件向父组件传递数据
      • 全局事件总线
      • 企业级开发组件结构
    • 脚手架搭建
      • 脚手架目录结构
      • render函数
  • 路由
    • 自定义插件
    • 路由使用
    • 深度路由
    • 多级路由
      • 组件的数据传递
    • 编程式路由导航
    • 路由守卫
      • 全局路由守卫
      • 独享路由守卫和组内路由守卫
  • axios
    • 全局安装JSON server
      • get请求快速入门
      • 提交请求
        • 实现增加功能
        • 实现删除功能
      • 异常处理方式
      • 响应对象结构分析
    • axios默认配置
  • EL组件库使用
    • EL组件导入
  • 布局组件
    • Layout布局
    • Container布局容器
    • Button按钮
      • 普通按钮
      • 朴素按钮
      • 圆角按钮
      • 图片按钮
      • 按钮组
  • 表单组件
    • 单选框
    • 复选框
    • input文本框
    • 下拉框
    • 日期和时间
    • 文件上传
  • Vue3
    • Vue3的项目初始化
      • 如何初始化Vue3项目
      • 目录结构
      • Vue2和Vue3的区别
    • 组合式API
      • setup函数
    • 响应式函数
      • reactive
      • ref
        • 对象类型
        • 简单类型
        • 数组类型
    • 属性
      • 计算属性
        • get和set写法
      • 侦听属性
        • 对象类型侦听
        • 精确侦听
    • 生命周期函数
    • 组件通信
      • 父传子通信
      • 子传父通信
        • 模版引用ref
        • 事件总线
  • Vuex
    • 创建Vuex项目
      • 创建store对象
        • 实现actions、mutations和state

Vue基础

Vue的底层原理

MVVN模型

  • M:模型(model):对应的data中的数据
  • V:视图(View):模版
  • VM:视图模型(ViewModel):Vue事例对象

MVVM数据监视与代理

image-20240619193709170

el挂载点

  • vue实例的作用范围是el选项命中的元素及其内部的后代元素
  • 可以使用其他的选择器,建议使用id选择器
  • 可以使用在其他双标签中,但是要注意不能使用在html标签body标签
<script>var app = new Vue({el:"#app",	//id选择器el:".app",	//class选择器el::"div",	//标签选择器data:{message:"el挂载点"}})
</script>

data数据对象

  • vue中用到的数据定义在data
  • data中可以写复杂类型的数据
  • 渲染复杂类型数据时,应当遵守JS语法
<div id="app">{{message}}{{preson.name}}{{preson.age}}<ul><li {{city[0]}}></li><li {{city[1]}}></li><li {{city[2]}}></li><li {{city[3]}}></li></ul>
</div>
<script>var app = new Vue({el:"#app",data:{message:"data数据对象",}person:{	//对象属性name:"天下无贼"age:"188"},city:["北京","上海","广州","深圳"]	数组属性}})
</script>

methods方法

image-20240619194051903

不要写尖头函数,因为会改变this指向

image-20240619194121262

指令

v-text

  • 设置标签的文本值内容
  • 默认写法会替换全部内容,使用插值表达式{{}}就是他的简写形式
  • 内部支持写表达式
<div id="app"><h2 v-text="message"></h2>	<!--输出的是"v-text属性"--><h2 v-text="message">我会被覆盖</h2>	<!--这个输出的也是"v-text属性",没有"aaa"的原因是因为v-text覆盖掉了--><h2 v-text="message+'!!!'"></h2>	<!--支持字符串拼接表达式-->
</div>
<script>var app = new Vue({el:"#app",data:{message:"v-text属性",aaa:"aaa"},})
</script>

v-html

  • 设置标签的html对象
  • 内容中有html结构会被解析成标签
  • 解析文本的时候使用v-text,需要解析html结构的时候使用v-html
<div id="app"><p v-html="message"></p>
</div>
<script>var app = new Vue({el:"#app",data:{message:" <a herf="www.baidu.com">v-html</a> "},})
</script>

v-on

  • 为元素绑定事件
  • 绑定的方法定义在methods属性当中
  • 方法的内部通过this关键字可以访问定义在data中的数据
<div id="app"><p>{{message}}</p><button v-on:click="do">v-on触发</button><button @click="do">v-on简写触发</button>	<!--简写形式-->
</div>
<script>var app = new Vue({el:"#app",data:{message="你好"},methods:{do:function(){//方法逻辑this.message+="我不好"	//使用[this.]关键字拿到当前对象}}})
</script>

v-on简写可以为@

传递自定义参数,事件修饰符

<div id="app"><button @click="do(p1,'你好')"></button><button @keyup.enter="do2"></button>
</div>
<script>var app = new Vue({el:"#app",data:{},methods:{do:function(p1,p2){console.log("v-on自定义参数"+p1+p2);},do2:function(){console.log("键盘enter键事件修饰符");}}})
</script>

写一个计数器小案例

<div id="app"><button @:click="sub">-</button><span>{{message}}</span><button @click="add">+</button>
</div>
<script>var app = new Vue({el:"#app",data:{message:0},methods:{add:function(){if(this.message<10){this.message++;}else{alert("别点啦最大了!!!")}},sub:funct(){if(this.message>0){this.message--;}else{alert("别点啦最小了!!!")}}}})
</script>

v-show

  • 根据后面表达式的真假来决定元素的显示隐藏
  • 原理是修改了元素的display来实现隐藏
  • 指令后面的内容,最终都会被解析成布尔值
  • 值为true元素显示,值为false元素隐藏
<div id="app"><P v-show="true">通过设置布尔值来决定v-show</P><P v-show="isShow">通过isShow来决定</P><button @click="do">改变isShow值</button><P v-show="age>=18">通过元素值来决定</P>
</div>
<script>var app = new Vue({el:"#app",data:{age:17,isShow:false},methods:{do:function(){this.isShow =!this.isShow;}}})
</script>

v-if

  • 根据表达式的增加切换元素的显示状态
  • 本质上是操作Dom元素来切合显示状态
  • 频繁的切换v-show因为消耗的性能较小,但是占用内存较高.反之使用v-if
<div id="app"><P v-if="isShow">这个是v-if的案例</P><button @click="do">改变isShow值</button>
</div>
<script>var app = new Vue({el:"#app",data:{isShow:true},methods:{do:function(){this.isShow =!this.isShow;}}})
</script>

v-bind

  • 为元素绑定属性
  • 语法模板v-bind:属性名=表达式
  • 简写形式直接:属性名

image-20240619192029170

<div id="app"><a v-bind:href="message">点我以下</a><button @click="do">改变isShow值</button>
</div>
<script>var app = new Vue({el:"#app",data:{message:"www.baidu.com",}})
</script>

v-for

  • 根据数据生成列表结构
  • 语法模板v-for="(item,index)in 数据"(item代表每一项,index是索引)
<div id="app"><ul><li v-for="item in arr">v-for案例:{{item}}</li></ul><h2 v-for="(item,ixdex) in arr">{{"index":index}}{{item.name}}</h2>
</div>
<script>var app = new Vue({el:"#app",data:{arr:[1,2,3,4,5],obj:[{name:"aaa"},{name:"bbb"}]	//对象数组}})
</script>

v-model

  • 获取和设置表单元素的值(双向数据绑定)
  • 绑定的数据会和表单元素值相关联
  • 绑定的数据和表单元素的值是双向绑定
<div id="app"><input type="text" v-model="message"><h2>{{message}}</h2>
</div>
<script>var app = new Vue({el:"#app",data:{message:"v-model"},methods:{}})
</script>

其他指令

image-20240619201900666

自定义指令

image-20240619202454927

简写形式

image-20240619202720082

需要在学习一下

事件和属性

事件参数e

e获得当前元素

image-20240619194413344

带参数$event

image-20240619194449537

事件修饰符

image-20240619194840377

计算属性

computed计算属性

image-20240619195312060

image-20240619195329828属性调用不需要()

侦听属性

watch侦听属性

image-20240619195613836

简化写法:

image-20240619195746318

深度侦听

deep深度侦听属性

image-20240619200229085

image-20240619200220494

侦听器与计算属性对比

过滤属性

filters过滤属性

image-20240619200756268

生命周期函数

image-20240619203201230

组件

组件创建和使用

首先在脚本区域声明一个组件

image-20240620094016325

Vue.entend() 可以省略

image-20240620094306636

注册组件

image-20240620094230641

使用组件
image-20240620094134052

关于组件的命名

  • SchoolMes【需要脚手架】,回避HTML关键字
  • 建议组件声明时定义name属性
  • Vue工具最终都会将组件命名变成“首字母大写”

声明的时候就把名字声明好了

image-20240620094559412

image-20240620094616419

全局组件

第一个参数是组件的名称,第二个参数是配置组件项。

image-20240620094939171

第二行的name也可以删掉

父子组件

创建子组件:要在父组件中注册子组件

image-20240620095435278

注意需要先声明子组件,把子组件放前面,让他先加载

使用子组件与使用组件方法一样

单文件组件

在IDEA中配置vue文件

image-20240620095732893

新建vue文件的结构

image-20240620095834084

父组件自动导入

image-20240620100137730

组件通信

image-20240620102916784

image-20240620103313732

加上绑定就变成数值,而不是字符串了

image-20240620103426926

子组件向父组件传递数据

第一种方式:通过props

image-20240620110721897

第二种方法:通过$emit

image-20240620111433592

第三种方法:$on挂载事件和$emit调用

image-20240620112005694

全局事件总线

实现任意组件传递数据

image-20240620112237084

image-20240620112425974

main.js创建事件总线

image-20240620112458662

image-20240620112720707

image-20240620112729562

建议使用完总线后消亡该总线image-20240620112818566

企业级开发组件结构

  • 总组件App.vue

    要有一个顶级结构image-20240620100522995

  • vm事例对象main.js

    image-20240620100801793

  • 容器index.html

    image-20240620101031420

脚手架搭建

搭建脚手架命令

image-20240620101139705

  1. 配置node
  2. 配置淘宝镜像
  3. 全局安装vue脚手架
  4. 创建项目
  5. 启动项目

脚手架目录结构

修改配置项目

image-20240620102416984

lintOnSave:false取消因为命名不规范而报错

image-20240620102349727

render函数

image-20240620102823586

路由

自定义插件

创建插件,在src文件包下创建一个js文件

使用插件,在main.js文件中,

image-20240620113139802

路由使用

image-20240620113551014

第一步安装路由

第二步安装路由插件

  • ​ 创建一个新的文件夹来当作我们的路由

image-20240620114008513

第三步路由的使用

image-20240620114125849

第四步使用路由规则

深度路由

image-20240620114533209

image-20240620115023919

多级路由

组件的数据传递

image-20240620115339108

编程式路由导航

image-20240620115627069

路由守卫

全局路由守卫

image-20240620115730195

独享路由守卫和组内路由守卫

image-20240620115806286

axios

  • 首先导入axios
    axios.get(地址?查询字符串).then(funciton(response){},function(err){ })
  • 使用get和post方法即可发送对应的请求
  • then方法中的回调函数会在请求成功或失败时候触发
  • 通过回调函数的形参可以获取响应内容或者错误信息

全局安装JSON server

image-20240619203815033

get请求快速入门

image-20240619204328168

简化写法

image-20240619204521834

改造

image-20240619211422645

提交请求

实现增加功能

image-20240619210618978

async改造

image-20240619211509396

实现删除功能

image-20240619211201687

改造

image-20240619211633178

异常处理方式

image-20240619204800099

简写形式

image-20240619204852554

响应对象结构分析

image-20240619205228317

axios默认配置

image-20240619205501344省略这些

image-20240619205524955

EL组件库使用

EL组件导入

布局组件

Layout布局

image-20240620144100810

image-20240620144030458

Container布局容器

image-20240620144158054

image-20240620144401978

垂直布局和水平布局

Button按钮

image-20240620144627784

普通按钮

image-20240620144819742

image-20240620144827804

朴素按钮

image-20240620144849133

image-20240620144904066

圆角按钮

image-20240620144918610

image-20240620144925727

图片按钮

image-20240620144945025

image-20240620145004556

因为加了一个circle所以是圆形按钮,下面是去掉

image-20240620145045213

按钮组

image-20240620145114061

image-20240620145132120

表单组件

单选框

image-20240620145226547

image-20240620145406165

image-20240620145421305

image-20240620145441270

image-20240620145506890

image-20240620145520963

image-20240620145542035

image-20240620145629122

image-20240620145633401

复选框

image-20240620145704977

input文本框

下拉框

image-20240620150558958

日期和时间

image-20240620150945778

文件上传

image-20240620151322052

Vue3

Vue3的项目初始化

image-20240622103632614

如何初始化Vue3项目

image-20240622103737757

初始化项目

image-20240622104025230

运行项目

image-20240622104055805

目录结构

整体与vue2相似,但还是有一点区别。

Vue2和Vue3的区别

  • Vue2属于选项氏API
  • Vue3属于组合式API

image-20240622104433035

image-20240622104628429

组合式API

setup函数

作用:数据和事件函数的初始化工作。

变量和事件想要在中使用必须要使用return

setup是执行在beforeCreate()之前的

image-20240622105133953

第二个案例理解vue2改造vue3

image-20240622105704829

setup语法糖

image-20240622105305770

其他方法就都包括在里面了

响应式函数

reactive

注意:reative响应的只有是对象,不能接受其他的形式

image-20240622110120163

ref

对象类型

当参数是一个对象

image-20240622110334097

简单类型

当参数是一个简单类型,数字、字符串、布尔

image-20240622110453903

数组类型

当参数是一个数组类型的时候

image-20240622110529013

属性

计算属性

image-20240622111004016

get和set写法

image-20240622111107634

侦听属性

watch(侦听属性,(新值,旧值))

image-20240622111551675

一般旧值写的会少一点,可以直接改成只有新值

image-20240622111659394

对象类型侦听

也就是深度侦听

image-20240622112606312

精确侦听

对侦听对象的某一个值进行侦听

image-20240622112823597

生命周期函数

image-20240622112926174

vue2

image-20240622113201601

组件通信

父传子通信

子组件的变化

image-20240622113513831

父组件的变化

image-20240622113848991

子传父通信

子组件的改造

image-20240622114210433

父组件的改造

image-20240622114404399

模版引用ref

这个要自己学一会

事件总线

provide与inject

Vuex

Vuex是专门为Vue.js设计的状态管理库,以利用Vue.js的细粒度数据响应机制来进行高效的状态更新。

实现了多组件共享数据。

image-20240622155332438

创建Vuex项目

image-20240622152244296

image-20240622153922789

创建store对象

新建一个js文件

三个对象的作用:

image-20240622154418773

创建store对象

image-20240622154639531

引入store对象

image-20240622154550455

image-20240622154550455

实现actions、mutations和state

image-20240622160051206

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com