您现在的位置是:首页 >学无止境 >Vue的学习网站首页学无止境

Vue的学习

Rorschach~ 2025-02-18 12:01:03
简介Vue的学习

vue的介绍

1.VUE是什么

概念:vue是一个用于构建用户界面渐进式框架

构建用户界面:基于 数据 动态 渲染 页面

渐进式:循序渐进的学习

框架:一套完整的项目解决方案,提升开发效率↑(理解记忆规则)

规则→官网

渐进式

Vue的两种使用方式:

1.Vue核心包开发

 场景:局部 模块改造

2.Vue核心包&Vue插件 工程化开发

 场景:整站 开发

2.创建Vue实例,初始化渲染

创建Vue实例,初始化渲染步骤:

1.准备容器(Vue所管理的范围)

2.引包(官网寻找)(开发版本包/生产版本){下载开发版本,}
3.创建Vue实例 new Vue()

4.添加配置项→渲染数据

el 指定挂载点

data 提供数据

实例:

3.插值表达式{ {}}

插值表达式是一种Vue的模板语法

1.作用:利用表达式进行插值,渲染到页面中

表达式:是可以被求值的代码,JS引擎会将其计算出一个结果

2. 语法:{ { 表达式 }}

3.注意点:

(1)使用的数据必须存在(data)

(2)支持的是表达式,而非语句,比如:if for ...

(3)不能在标签属性中使用{}}插值

实例:

Vue核心特性:响应式

如何访问or修改?

data中的数据,最终会被添加到实例上

1访问数据:“实例.属性名”

2修改数据:“实例.属性名”=“值”

实例:

Vue指令

Vue会根据不同的指令,针对标签实现不同的功能。

指令:带有v-前缀 的 特殊 标签属性

v-html:

作用:设置元素的innerHTML,解析字符串标签

语法:v-html="表达式”

实例:

v-show

1.作用:控制元素显示隐藏

2.语法:v-show=“表达式”表达式值true显示,false隐藏

3.原理:切换 display:none 控制显示隐藏

4.场景:频繁切换显示隐藏的场景

v-if

1.作用:控制元素显示隐藏(条件渲染)

2. 语法:v-if="表达式”表达式值true显示,false 隐藏

3.原理:,基于条件判断,是否创建 或 移除 元素节点

4.场景:要么显示,要么隐藏,不频繁切换的场景

 v-else v-else-if

1.作用:辅助v-if 进行判断渲染

2. 语法:v-else v-else-if="表达式”

3.注意:需要紧挨着v-if一起使用

v-on

1.作用:注册事件 =添加监听 + 提供处理逻辑

2. 语法:

1 v-on:事件名="内联语句”

2 v-on:事件名="methods中的函数名"

3.简写:@事件名

4.注意:methods函数内的this指向 Vue实例

v-on调用传参

 v-bind

1.作用:动态的设置html的标签属性 → src url title ...

2.语法:v-bind:属性名="表达式”

3.注意:简写形式:属性名="表达式”

v-for

v-for 中的 key

语法:key属性=“唯一标识”

作用:给列表项添加的唯一标识。便于Vue进行列表项的正确排序复用。

key作用:给元素添加的唯一标识,便于Vue进行列表项的正确排序复用。。

v-for 的默认行为会尝试 原地修改元素(就地复用)

注意点:

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

2. key 的值必须具有 唯一性

3.推荐使用id作为key(唯一),不推荐使用index作为key(会变化,不对应)

v-model

1.作用:给 表单元素 使用,双向数据绑定→可以快速 获取 或 设置 表单元素内容

1数据变化 →视图自动更新

2视图变化→数据自动更新

2.语法:v-model=’变量‘

指令修饰符

通过"."指明一些指令 后缀,不同后缀封装了不同的处理操作→ 简化代码

1按键修饰符

@keyup.enter→ 键盘回车监听

2 v-model修饰符

v-model.trim→去除首尾空格

v-model.number →转数字

3 事件修饰符

@事件名.stop→阻止冒泡

@事件名.prevent→ 阻止默认行为

v-bind 对于样式控制的增强

为了方便开发者进行样式控制,Vue扩展了v-bind的语法,可以针对class类名和style 行内样式 进行控制

v-model 应用于其他表单元素

常见的表单元素都可以用v-model绑定关联 →快速 获取 或 设置 表单元素的值
它会根据 控件类型 自动选取 正确的方法 来更新元素

输入框 input:text  -> value
文本域 textarea    -> value
复选框 input:checkbox  -> checked
单选框 input:radio    -> checked
下拉菜单 select   -> value

计算属性:

computed 计算属性 vs methods 方法

computed 计算属性:

作用:封装了一段对于数据的处理,求得一个结果

语法:

1写在computed 配置项中

2作为属性,直接使用→ this.计算属性 { { 计算属性 }}

methods 方法:

作用:给实例提供一个方法,调用以处理业务逻辑

语法:

1写在 methods 配置项中

2作为方法,需要调用 → this.方法名(){ { 方法名()}}@事件名="方法名

缓存特性(提升性能):

计算属性会对计算出来的结果缓存,再次使用直接读取缓存,

依赖项变化了,会自动重新计算→并再次缓存

计算属性完整写法:

watch侦听器(监视器)

作用:监视数据变化,执行一些业务逻辑 或异步操作。

语法:

1(优先)简单写法→简单类型数据,直接监视,监视简单类型的变化

2完整写法 → 添加额外配置项(深度监视复杂类型,立刻执行)

(1) deep:true 对复杂类型深度监视
(2)immediate:true 初始化立刻执行一次handler方法

Vue 生命周期 和 生命周期的四个阶段

工程化开发&脚手架 Vue CLI

开发 Vue的两种方式:

1.核心包传统开发模式:基于html/css/js文件,直接引入核心包,开发Vue。
2.工程化开发模式:基于构建工具(例如:webpack)的环境中开发Vue。

问题:

1 webpack 配置不简单

2 雷同的基础配置

3 缺乏统一标准

需要一个工具,生成标准化的配置!

基本介绍:

Vue CLI是Vue官方提供的一个全局命令工具。

可以帮助我们快速创建一个开发Vue项目的标准化基础架子。【集成了webpack配置】

好处:

1.开箱即用,零配置

2. 内置 babel 等工具

3. 标准化

使用步骤:

1.全局安装(一次):yarn global add@vue/cli 或 npmi @vue/cli-g
2.查看 Vue版本:vue -- version

3.创建项目架子:vue create project-name(项目名-不能用中文)
4.启动项目:yarn serve 或 npm run serve(找package.json)

组件化开发&根组件


1组件化:一个页面可以拆分成一个个组件,每个组件有着自己独立的结构、样式、行为。

好处:便于维护,利于复用→提升开发效率。

组件分类:普通组件、根组件。

2 根组件:整个应用最上层的组件,包裹所有普通小组件。

     

                                        

App.vue文件(单文件组件)的三个组成部分

1.三部分组成:

 template:结构(有且只能一个根元素)

script: js逻辑

style:样式(可支持less,需要装包)

2. 让组件支持 less

(1)style标签,lang="less"开启less功能
(2)装包:yarn add less less-loader

普通组件的注册使用:

组件注册的两种方式:

1.局部注册:

只能在注册的组件内使用

步骤:

创建.vue文件(三个组成部分,单文件组件)

在使用的组件内导入并注册,并局部注册 components(组件名:组件对象)

使用:

当成 html标签使用‘<组件名></组件名>`

注意:

组件名规范→大驼峰命名法,如:HmHeader

2.全局注册:

所有组件内都能使用(比如通用性组件)

使用:

当成 html标签使用‘<组件名></组件名>`

步骤:

1.创建.vue文件(三个组成部分,单文件组件)

2 main.js 中导入并进行全局注册Vue.component(组件名,组件对象)

注意:

组件名规范→大驼峰命名法,如:HmHeader

main.js

快速生成结构:<vue

技巧:

一般都用局部注册,如果发现是通用组件,再抽离到全局。

综合案例-组件拆分

组件的三大组成部分注意点

组件的样式冲突 scoped

默认情况:写在组件中的样式会 全局生效

1. 全局样式:默认组件中的样式会作用到全局

2. 局部样式:可以给组件加上scoped属性,可以让样式只作用于当前组件

scoped原理

1. 当前组件内标签都被添加data-v-hash值 的属性

2.css选择器都被添加[data-v-hash值]的属性选择器

最终效果:必须是当前组件的元素,才会有这个自定义属性,才会被这个样式作用到

data是一个函数

组件通信

组件通信,就是指 组件与组件之间的数据传递。

组件的数据是独立的,无法直接访问其他组件的数据。

想用其他组件的数据→组件通信

1.两种组件关系分类 和 对应的组件通信方案

父子关系      →      props & $emit

非父子关系   →    provide & inject 或 eventbus

通用方案       →     vuex

父子通信流程图:

1.父组件通过props将数据传递给子组件

2.子组件利用 $emit通知父组件修改更新

父子通信方案的核心流程

1.父传子props:

1.父中给子添加属性传值

2.子props接收

3.使用

2.子传父$emit:

1.子$emit发送消息

2.父中给子添加消息监听

3.父中实现处理函数

父→子

父组件通过props将数据传递给子组件

动态属性加冒号:

父属性:

子属性:

子→父
子组件利用 $emit通知父组件,进行修改更新

子组件:

父组件:

prop

Prop定义:组件上注册的一些 自定义属性

Prop作用:向子组件传递数据

特点:

可以 传递 任意数量 的prop

可以 传递 任意类型 的prop

实例:

父组件:

子组件:

props校验

1基础写法(类型校验)

  

2.完整写法:

口诀:谁的数据谁负责

非父子通信(拓展)-event bus 事件总线

作用:非父子组件之间,进行简易消息传递。(复杂场景→Vuex)

1.创建一个都能访问到的事件总线(空Vue实例)→utils/EventBus.js

2.A组件(接收方),监听Bus实例的事件

3.B组件(发送方),触发Bus实例的事件

实例:

非父子通信(拓展)-provide&inject

provide & inject作用:跨层级共享数据
1. 父组件 provide提供数据

2. 子/孙组件 inject取值使用

V-model原理

1. 表单类基础组件封装思路

父传子:父组件动态传递prop数据,拆解v-model,绑定数据

子传父:监听输入,子传父传值给父组件修改

本质:实现了实现 子组件 和 父组件数据 的双向绑定

2. v-model 简化代码的核心步骤

子组件中:props通过value接收,事件触发input

父组件中:v-model给组件直接绑数据

.sync 修饰符

作用:可以实现 子组件 与 父组件数据 的 双向绑定,简化代码

特点:prop属性名,可以自定义,非固定为value

场景:封装弹框类的基础组件,visible属性 true显示false隐藏

本质:就是:属性名 和@update:属性名 合写

ref和$refs

作用:利用ref和$refs可以用于 获取dom元素,或组件实例

特点:查找范围→当前组件内(更精确稳定)

(1)获取 dom:

1.目标标签-添加ref属性

2.恰当时机,通过this.$refs.xxx,获取目标标签

实例:

代码:

2.获取组件:

1.目标组件-添加ref属性

2.恰当时机,通过this.$refs.xxx,获取目标组件,

就可以调用组件对象里面的方法

实例:

代码:

Vue异步更新、$nextTick

需求:编辑标题,编辑框自动聚焦

1.点击编辑,显示编辑框

2. 让编辑框,立刻获取焦点

问题:“显示之后",立刻获取焦点是不能成功的!

原因:Vue是异步更新DOM(提升性能)

代码:

$nextTick:等DOM更新后,才会触发执行此方法里的函数体

语法:this.$nextTick(函数体)

实例代码:

注意

setTimeout(()=>{

this/$refs.inp.focus()

},1000)

也可以但是,等待的时间不精准

$nextTick等dom更新完,立刻去执行准备的函数体

自定义指令:

实例代码:

指令框自动获取焦点

全局指令:

v-focus可以使用多次

局部注册指令:

自定义指令-指令的值

实例:

1.inserted提供的是元素被添加到页面中时的逻辑

2.update指令的值修改的时候触发,提供值变化后dom更新的逻辑

指令值的语法:

1.v-指令名=“指令值",通过等号可以绑定指令的值

2.通过binding.value 可以拿到指令的值

3.通过update钩子,可以监听指令值的变化,进行dom更新操作

自定义指令-v-loading 指令封装

分析:

1.本质loading效果就是一个蒙层,盖在了盒子上

2.数据请求中,开启loading状态,添加蒙层

3.数据请求完毕,关闭loading状态,移除蒙层

1.准备loading类:

2.开启loading类:

box加上loading就是开启loading类状态

3.封装:

定义v-loading="isloading"并给它加逻辑:

关闭loading类:

核心思路:

(1)准备类名loading,通过伪元素提供遮罩层

(2)添加或移除类名,实现loading蒙层的添加移除

(3)利用指令语法,封装v-loading 通用指令

inserted 钩子中,binding.value判断指令的值,设置默认状态

update 钩子中,binding.value判断指令的值,更新类名状态

插槽-默认插槽

作用:让组件内部的一些 结构 支持 自定义

需求:要在页面中显示一个对话框,封装成一个组件

插槽基本语法:

1.组件内需要定制的结构部分,改用<slot></slot>占位

2.使用组件时,<MyDialog></MyDialog>标签内部,传入结构替换slot

实例:

代码:

插槽使用的基本步骤

1.先在组件内用slot占位

2.使用组件时,传入具体标签内容插入

插槽-后备内容

实例:

如何给插槽设置默认显示内容:

在slot标签内,写好后备内容

插槽-具名插槽

效果:

3. v-slot:插槽名 可以简化成#插槽名

实例:

一旦插槽起了名字,就是具名插槽只支持定向分发

需要通过template标签包裹需要分发的结构,包裹成一个整体

组件内 有多处不确定的结构就使用具名插槽,步骤:

1.slot占位,给name属性起名字来区分

2. template配合 v-slot:插槽名分发内容

v-slot:插槽名 可以简化成#插槽名

插槽-作用域插槽

基本使用步骤:

1. 给slot标签,以添加属性的方式传值

2.所有添加的属性,都会被收集到一个对象中

3.在template中,通过‘#插槽名="obj"`接收,默认插槽名为default

实例:

作用域插槽使用步骤

(1)给slot标签,以添加属性的方式传值

(2)所有属性都会被收集到一个对象中

(3)template中,通过‘#插槽名="obj"`接收

单页应用程序:SPA-Single Page Application

例如:单页网易云音乐官网,多页京东官网

使用场景:

单页面应用:系统类网站/内部网站/文档类网站/移动端站点(Vue应用

多页面应用:公司官网/电商类网站

路由的介绍

Vue中路由:路径和组件的映射关系

根据路由就能知道不同路径的,应该匹配渲染哪个组件

VueRouter 的介绍(Vue js官方的路由管理器)

目标:认识插件VueRouter,掌握VueRouter的基本使用步骤

作用:修改地址栏路径时,切换显示匹配的组件

说明:Vue官方的一个路由插件,是一个第三方包

官网:https://v3.router.vuejs.org/zh/

使用:

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。