VUE3(黑马程序员vue2+vue3)

花了一个月半弄完可惜视频里案例的接口我都是产生跨域报错问题可能是里面的老师离职关闭了

不建议观看因为视频里的vue3内容并不多 还是需要找其他的视频观看比如最基本的setup就没有讲

就是讲了拦截器

Vuex自定义

指令vue2vue3的区别

Proxy跨域代理

如果接口是成功的 请留言私信我 爱你呦

Vue简介

1.什么是vue

官方给出的概念:Vue是一套用于构建用户界面的前端框架

构建用户界面<->框架

1.1 解读核心关键词:构建用户界面

前端开发者最主要的工作,就是为网站的使用者构建出美观、舒适、好用的网页

         -美化样式 基于HTML
构建用户界面 -编写结构 基于CSS样式
         -处理交互 基于JS

1.2 构建用户界面的传统方式

在传统的Web前端开发中,是基于jQuery + 模板引擎的方式来构建用户界面的

编写结构
基于模板结构技术 把数据渲染到页面上 
优点:初步解放了前端开发者 从此不用手动拼接字符串来渲染网页结构
缺点:需要定义大量的模板结构 缺少语法高亮和智能提示 数据变化时需要重新调用模板编译的函数

美化样式
基础CSS样式 美化网页的可视化效果

处理交互
基于jQuery技术,处理用户和网页之间的交互行为
优点:屏蔽了DOM API 之间的兼容性,提高了DOM操作的效率和体验
缺点:当业务复杂时、数据变化频繁时,前端开发者需要把大量的时间和精力浪费在DOM的操作上
     而不是核心业务的处理上

1.3 使用vue构建用户界面

使用vue构建用户界面,解决了jQuery + 模板引擎的诸多痛点 极大的提高了前端开发的效率和体验

编写结构
基于vue中提供的指令,可以方便快捷的渲染页面的结构
数据驱动视图图(只要页面依赖的数据源变化,则页面自动重新渲染)
Ps:指令是vue为开发者提供的模板语法,用来辅助开发者渲染页面的结构

美化样式
基础CSS样式 美化网页的可视化效果

处理交互
基于vue中提供的时间绑定 可以轻松处理用户和页面之间的交互行为
Ps:开发者把工作的重心放在核心业务的实现上

1.4解读核心关键词:框架

官方给vue的定位是前端框架,因为它提供了构建用户界面的一整套解决方案(vue全家桶)

vue(核心库)
vue-router(路由方案)
vuex(状态管理方案)
vue组件库(快速搭配页面UI效果的方案)

以及辅助vue项目开发的一系列工具
vue-cli(npm全局包:一键生成工程化的vue项目 - 基于webpack、大而全)
vite(npm全局包:一键生成工程化的vue项目-小而巧)
vue-devtools(浏览器插件:辅助调试的工具)
vetur(vscode插件:提供语法高亮和智能提示)

1.5总结:什么是vue

vue是一套用于构建用户界面的前端框架

            指令             构建用户界面的一整天解决方案
        数据驱动视图 构建用户界面<->框架 vue全家桶(vue+vue-router+vuex+组件库)
        事件绑定             提供了辅助项目开发的配套工具
                         (vue-cli + vue-devtools)

2.vue的特性

vue框架的特性,主要体现如下两个方面

数据驱动视图

双向数据绑定

2.1数据驱动视图

在使用vue的页面中,vue会监听数据的变化,从而自动渲染页面的结构

          自动渲染                     变化
页面结构<-----------vue监听数据的变化<-------->页面所依赖的数据


好处 程序员只要把数据维护好,当页面数据发送变化时,页面会自动重新渲染 
注意:数据驱动视图是单向的数据 绑定

2.2 双向数据绑定

在填写表单时,双向数据绑定可以辅助开发者在不操作DOM的前提下
自动把用户填写的内容同步到数据源中


          自动渲染                     变化
页面结构<-----------vue<-------->页面所依赖的数据
    ----------->                  --------->
      值发生变化                   自动同步

好处 开发者不需要手动操作DOM元素 来获取表单元素最新的值

2.3 MVVM

MVVM是vue实现数据驱动视图和双向数据绑定的核心原理
MVVM指的是Model View 和ViewModel

Model 表示当前页面渲染时所依赖的数据源
View  表示当前页面所渲染的DOM结构
ViewModel 表示vue的实例 它是MVVM的核心

View  ViewModel  Model

DOM    vue     js Object

2.4 MVVM的工作原理

ViewModel作为MVVM的核心,是它把当前页面的数据源(Model)和页面结构(View)连接在一起

        自动更新          监听数据源变化
View<-----------ViewModel<----------->Model
     ----------->         ----------->
      监听DOM变化           自动同步

3.vue的版本

当前vue共有3个大版本其中
2.x版本的vue是目前企业级项目开发中的主流版本
3.x版本的vue于2020-09-19发布,生态还不完善,尚未在企业级项目开发中普及和推广
1.x版本的vue几乎被淘汰,不再建议学习与使用

总结:
3.x版本的vue是未来企业级项目开发的趋势
2.x版本的vue在未来会被逐渐淘汰

3.1 vue3.x和vue2.x版本的对比

vue2.x中绝大多数的API与特性,
在vue3.x中同样支持。同时,vue3.x中还新增了3.x所特有的功能
并废弃了某些2.x中的旧功能

新增的功能

组合式API 多根节点组件 更好的TypeScript

废弃的旧功能如下

过滤器 不再支持%on $off和$once实例方法

vue的基本使用

1.基本使用步骤

1 导入vue.js的script脚本文件

2 在页面中声明一个将要被vue所控制的DOM区域

3 创建vm实例对象

vue的指令与过滤器

1.指令的概念

指令是vue为开发者提供的模板语法 用于复制开发者渲染页面的基本结构

vue中的指令按照不同的用途可以分为如下6大类

内容渲染指令 属性绑定指令 事件绑定指令
双向绑定指令 条件渲染指令 列表渲染指令

注意:指令是vue开发中最基础 最常用 最简单的知识点

1.1 内容渲染指令

内容渲染指令依赖辅助开发者渲染DOM元素的文本内容 常用的有3个

v-text {{}} v-html

v-text
缺点:会覆盖元素原有的内容

用法示例 
       
       


       
       
       

性别

{{}}

vue提供的{{}}语法,专门用来解决v-text会覆盖默认文本内容的值问题
{{}}语法专业名称是插值表达式

实际开发中用的最多,只是内容的占位符 不会覆盖原有的内容

v-html

v-text指令和插值表达式只能渲染纯文本内容。
如果要包含html标签的字符串渲染为页面的html元素 则用v-html

1.2 属性绑定指令

注意:
插值表达式只能用在元素的内容节点中 不能用在元素的属性节点中

如果需要为元素的属性动态绑定属性值 则需要用到v-bind属性绑定指令

简写
vue规定v-bind:指令可以简写为 :


使用JS表达式

在vue提供的模板渲染语法中,除了支持绑定简单的数据值之外 还支持js表达式的运算

{{number + 1}}

{{ok ? 'yes':'no'}}

在v-bind期间 如果绑定内容需要进行动态拼接 则字符串的外面应该包裹单引号 
       

这是一个div

1.3 事件绑定指令

vue提供了v-on事件绑定指令,用来辅助程序员为DOM元素绑定事件监听。


通过v-on绑定的事件处理函数,需要在methods节点中进行声明

const vm = new Vue({
    el:'#app',
    data:{count:0},
    methods:{
        add(){
        this表示当前new出来的vm实例对象
        通过this可以访问到data中的数据
        this.count +=1
}        
}
})

注意:原生DOM对象有onclick oninput onkeyup等原生事件
分别为:v-on:click v-on:input v-on:keyup

事件对象event

在原生的DOM事件绑定中,可以在事件处理函数的形参处,接收事件对象event
同理v-on指令所绑定的事件处理函数中,同样可以接收到事件对象event

绑定事件并传参

在使用v-on指令绑定事件时,可以使用()进行传参,

count的值是:{{ count }}



            methods: {
                add(step) {
                    this.count+=step
                }
            }


$event

$event是vue提供的特殊变量,用来表示原生的事件参数对象event 
$event可以解决事情参数对象event被覆盖的问题

method: {
                add(n,e) {
                    this.count += n
            const bgColor=e.target.style.backgroundColor
            e.target.style.backgroundColor = bgColor==='red' ? '' : 'red'
                    }
                }
            }

事件修饰符

在事件处理函数中调用event.preventDefault()或event.stopPropagation() 
因此vue提供了事件修饰符的概念,来辅助程序员更方便的对事件的触发进行控制    

.prevent 阻止默认行为 *
.stop    阻止事件冒泡 *
.capture 以捕获模式触发当前的事件处理函数
.once    绑定的事件只触发1次
.self     只有在event.target是当前原生自身时触发事件处理函数

语法格式
.prevent 阻止默认行为 *
跳到百度首页

.stop    阻止事件冒泡 *


  外层的div
 
内部的div

最终输出 点击inner事件 没有outer事件

.capture 以捕获模式触发当前的事件处理函数


  外层的div
 
内部的div

最终输出 点击inner盒子 先触发outer事件 再触发inner事件

.once    绑定的事件只触发1次

内部的div

.self     只有在event.target是当前原生自身时触发事件处理函数


   

      外层的div
      
内部的div

   


最终输出 点击outer触发 box和outer事件 点击inner触发 inner和box事件

按键修饰符

在监听键盘事件 外面经常需要判断详细的按键 此时可以为键盘相关的事件添加按键修饰符


 

1.4 双向绑定指令

vue提供了v-model双向数据绑定指令 用来辅助开发者不操作DOM元素的前提 快速获取表单数据

v-model是双向 v-bind是单向

语法格式

用户得到名字是{{ username }}


注意 v-model指令只能配合表单元素一起使用

为了方便对用户输入的内容进行处理 vue为v-model提供了3个修饰符

.number 自动将用户的输入值转化为数值类型 
.trim   自动过滤用户输入的首尾空白字符
.lazy   在"change"时而非"input时更新"



1.5 条件渲染指令

条件渲染指令用来辅助开发者按需控制DOM的显示与隐藏
条件渲染指令有如下两个

v-if v-show

v-if v-show的区别

实现原理不同

v-if指令会动态地创建或移除DOM元素 从而控制元素在页面上的显示与隐藏

v-show指令会动态为元素添加或移除style="display:none"样式 从而控制元素在页面上的显示与隐藏


性能消耗不同:

v-if有更高的切换开销 而v-show有更高的初始渲染开销

如果需要非常频繁地切换 使用v-show

如果运行时条件很少改变 使用v-if

v-else

v-if可以单独使用 或配合v-else指令一起使用

v-else-if

v-else-if指令,充当v-if的 else-if块 可以连续使用

优秀

良好

一般

1.6 列表渲染指令

vue提供了v-for指令 用来辅助开发者基于一个数组来循环渲染相似的UI结构
v-for指令需要使用item in items的特殊语法

items是待循环的数组

item是当前的循环项

data:{
  list:[
    {id:1,name:'zs'}.
    {id:2,name:'ls'}
 ]
}


     
  • 姓名是:{{item.name}}

v-for中的索引

v-for指令还支持一个可选的第二个参数,即当前项的索引

语法格式为(item,index)in items

注意:v-for指令中的item项和index索引都是形参,可以根据需要进行重命名

使用key维护列表的状态

当列表的数据变化时,默认情况下,vue会尽可能的复用已存在的DOM元素,从而提升渲染的性能
这种默认的性能优化策略,会导致有状态的列表无法被正确更新

为了给vue一个提示,以便它能跟踪每个节点的身份,从而保证的列表被正确更新的前提下
提升渲染的性能。此时,需要为每项提供一个唯一的key属性

key的注意事项

1 key的值只能是字符串或数字类型

2 key的值必须具有唯一性(即:key的值不能重复)

3 数据项id属性的值作为key的值(id属性的值具有唯一性)

4 使用index的值当作key的值没有任意意义(index的值不具有唯一性)

5 使用v-for指令时一定要指的key的值(即提升性能、又防止列表状态絮乱)

单页面应用程序

1.什么是单页面应用程序

单页面应用程序(Single Page Application) SPA

指的是一个Web网站中只有唯一的一个HTML页面
所有功能与交互都在这唯一的一个页面内完成

2. 单页面应用程序的优点

1 良好的交互体验
  单页应用的内容的改变不需要重新加整个页面
  获取数据也是通过ajax异步获取
  没有页面之间的跳转,不会出现白屏现象

2 良好的前后端工作分离模式
  后端专注于提供API接口,更易实现API接口的复用
  前端专注于页面的渲染,更利于前端工程化的发展

3 减轻服务器的压力
  服务器只提供数据,不负责页面的合成与逻辑的处理,吞吐能力会提供几倍

3.单页面应用程序的缺点
  任何一种技术都有自己的局限性,对于SPA单页面应用程序来说,主要的缺点有如下两个

1 首屏加载慢
    路由懒加载
    代码压缩
    CDN加速
    网络传输压缩

2 不利于SEO
    SSR服务器端渲染
  

4.如何快速创建vue的SPA项目

vue官方提供了两种快速创建工程化的SPA项目的方式

基于vite创建SPA项目
基于vue-cli创建SPA项目

                vite          vue-cli
支持的vue版本        仅支持3.x      支持3.x和2.x
是否基于webpack           否              是
运行速度              快          较慢
功能完整度           小而巧          大而全
是否建议在企业级中使用  不建议           建议

vite的基本使用

1.创建vite的项目

即可基于vite创建vue3.x的工程化项目

npm init vite-app 项目名称

Ok to proceed? (y) y

cd 项目名称
npm install
npm run dev

2.梳理项目的结构

其中:
node_modules目录用来存放第三方依赖包
public是公共的静态资源目录
src是项目的源代码目录
.gitignore是Git的忽略文件
index.html是SPA单页面应用程序中唯一的HTML页面
package.json是项目的包管理配置文件

src这个项目源代码目录之下,包含了如下的文件和文件夹
assets目录用来存放项目中所有的静态资源文件
component目录用来存放项目中所有的自定义组件
App.vue是项目的根组件
index.css是项目的全局样式表文件
main.js是整个项目的打包入口文件

3.vite项目的运行流程

在工程化的项目中
vue要做的事情很单纯:通过main.js把App.vue渲染到index.html的指定区域中

其中:
App.vue用来编写待渲染的模板结构
index.html中需要预留一个el区域
main.js把App.vue渲染到了index.html所预留的区域中

组件化开发思想

1.什么是组件化开发

组件化开发指的是:根据封装的思想,
         把页面上可重用的部分封装为组件,从而方便项目的开发和维护


2.组件化开发的好处

前端组件化开发的好处主要体现在以下两方面
提高了前端代码的复用性和灵活性
提升了开发效率和后期的可维护性

3.vue中的组件化开发

vue 是一个完全支持组件库开发的框架,vue中规定组件的后缀名是.vue
之前App.vue文件本质上就是一个vue的组件

vue组件的构成

1.vue组件组成结构
    
每个.vue组件都是由3部分构成,分别是:

template->组件的模板结构
script->组件的JavaScript行为
style->组件的样式

其中,每个组件中必须包含template模板结构,而script行为和style样式是可选的组成部分

2.组件的template节点
vue规定:每个组件对应的模板结构,需要定义到