vue2+3基础

vue2+3

vue快速上手
什么是vue

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

vue核心包开发:局部模块改造

vue核心包+vue插件 工程化开发:整站开发

优点:大大提升开发效率

缺点:需要理解记忆规则

vue实例

初始化渲染:

核心四步

1.准备容器

2.引包 开发版本的包/生产版本的包

3.创建vue实例 new vue(){}

4.指定配置项

​ el 指定挂载点

​ data 提供数据

学习时使用开发版本

引入开发版本的包

.


{{msg}}

​ {{count}}

可以在里面加标签

const app = new Vue({

el: '#app',

​ data:{

​ msg:‘hello vue’

​ count:666

​ }

methods{}

})

插值表达式

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

{{表达式}}

使用的数据必须存在,支持表达式而非if那些语句,不能再标签属性里面使用{{}}插值

响应式特性

数据变化,对应的视图自动更新

在vue开发时可以在console里面进行修改

访问数据: 实例.属性名

开发者工具:装插件调试vue应用

vue指令

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

如 v-html=“src” 动态地去改变innerhtml

解析标签使用vue指令

v-show

控制元素显示隐藏

v-show = “表达式” true显示,false隐藏

切换css里面的display:none

在频繁切换显示隐藏的场景

v-if

控制元素显示隐藏(条件渲染) true显示,false隐藏

控制元素的创建和移除

要么显示,要么隐藏,步频繁切换的场景

v-else

v-else-if

辅助v-if进行判断渲染,一定得贴近v-if

v-on

注册事件 = 添加监听 + 处理逻辑

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

v-on: 事件名= “methods中的函数名”

v-on: 可以写成@

this指向当前的实例

v-on 调用传参

@click=“fn(参数1,参数2)”

v-bind 动态设置html的标签属性

v-bind:属性名=“表达式”

v-bind:src 可以省略成 :src v-bind可以省略

v-for 基于数据循环,多次渲染整个元素

v-for=“(item,index) in 数组” item 每一项 index索引,index和括号都可以省略

v-for中的key=“唯一标识”

给列表项添加唯一标识,便于vue进行列表项的正确排序复用

v-for=“”:key=“item.id”

没有加key v-for就会默认原地修改元素(就地复用)

key只能是字符串或者数字,且值必须要有唯一性

v-model 给表单元素使用,双向数据绑定,可以快速获取或设置表单元素内容

视图变化->数据更新 … 数据更新->视图变化

v-model=‘变量’

列表.filter(item => item.id !== id) 保留所有不等于id的项

列表.unshift({}) 往列表最前面进行添加,对于想要把id属性也加在前面的需求,我们可以在id变量那边变成 id: +new Date(),就可以把新建的id放在最前面

获取输入内容 this.todiName.trim() ===‘’

来对输入内容进行判断,trim去首位空格

指令修饰符:通过.指明一些指令的后缀,不同的修饰符后缀封装了不同的处理操作

key.enter监听回车事件

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

操作class 语法 : class=“对象/数组”

对象.

布尔值为true代表有这个类,否则就是没有这个类

数组.

操作style语法: style = “样式对象”

.

对于background-color这种在里面我们不能直接写入,所有我们得加上单引号变成’background-color’=pink这种写法,或者说使用小驼峰写法backgroundColor这样就可以了

比如说我们设置进度条百分比,我们可以用过设置一个变量perscent+"%"来设置百分比

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

对于单选框来说,加上name属性,可以实现分组,->同一组会相互排斥,比如说一个人的性别,给单选框加上value属性,可以给后台提交数据

计算属性,基于现有的数据,计算出来的新属性,以来数据变化,自动重新计算

语法: 声明在computed 配置项中,一个计算属性对应一个函数

computed: {

​ 计算属性名(){

​ 求值逻辑

​ return 结果

​ }

}

reduce方法求和

let total = this.list.reduce{(计算参数) => 计算方法,起始值}

computed 封装一段对于数据的处理,求得一个结果,有缓存特性可以提升性能:计算属性会对计算出来的结果缓存,再次使用直接读取缓存,依赖项变化了,会自动重新计算

methods使用几次就会调用几次,而computed只会调用一次

计算属性的完整写法

computed: {

​ 计算属性名: {

​ get(){

​ 一段代码逻辑(计算逻辑)

​ return 结果

​ },

​ set(修改的值){

​ 一段代码逻辑(修改逻辑)

​ }

​ }

}

简写的只能进行获取,不能进行设置

字符串通过slice函数切割

watch 监视器:监视数据变化,执行业务逻辑或异步操作

简单写法:简单类型数据,直接监视

watch: {

​ 监视对象(newValue,oldValue){

​ 该方法会在我们数据变化时执行

​ }

}

如果要监视对象里面的子属性,就把方法名改为 ‘对象.属性’

完整写法 添加额外配置项

deep: true,深度监视

immediate: true, 初始化立刻执行一次handler方法

watch:{

​ obj: {

​ deep:true,

​ immediate: true,

​ handler(newValue){

​ 操作,obj这个对象里面所有的值都被监视

​ }

​ }

}

every(item=> item.isChecked ===true) 对列表的所有属性进行全选判断

全选返选通过计算属性的完整写法来完成

isAll:{

​ get(){

​ return this.list.every(item.isChecked)

​ }

​ set(value){ value这里拿到的就是全选框的值

​ this.list.forEach(item => item.isChecked = value)

​ }

}

vue的生命周期

一个vue实例从创建到销毁的整个过程

new Vue( ) 创建阶段 挂载阶段 更新阶段 销毁阶段

创建阶段,把我们初始化的数据进行响应化处理

挂载阶段,渲染模板

更新阶段,数据修改,视图更新

销毁阶段,删除实例

在每个阶段系统都提供了两个函数,一个在阶段开始前,一个在阶段结束后,会自动运行

称为生命周期钩子,我们可以在特点阶段运行自己的代码

总共八个函数:beforeCreate,created,beforeMonte,monted,beforeUpdate,updated,beforeDestory,destoryed

工程化开发&脚手架 Vue CLI

基于建构工具的环境开发Vue

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

可以帮助我们快速创建一个开发Vue项目的标准化基础架子

使用步骤:(得先安装node配置环境变量)

1.全局安装(一次):yarn global add @vue/cil 或npm i @vue/cil -g

2.查看Vue的版本: vue --version

3.创建项目架子: vue create project-name(不能用中文名)

4.yarn serve 或 npm run serve (找package.json)

serve是在scripts里面的命令,可以改动它的名字

脚手架目录文件结束&项目运行流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O59oR9mW-1692542151534)(C:\Users\念天\AppData\Roaming\Typora\typora-user-images\image-20230820174339538.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ojqZaIAC-1692542151535)(C:\Users\念天\AppData\Roaming\Typora\typora-user-images\image-20230820175535583.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-06vnWioC-1692542151536)(C:\Users\念天\AppData\Roaming\Typora\typora-user-images\image-20230820175601557.png)]

组件化开发

一个页面可以拆分成一个个组件,每个组件都有着自己独立的样式,结构,行为.

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

根组件:整个应用最上层的组件,包裹所有小组件 App.vue

由结构,行为,样式三部分组成

提供结构

vue2里面只能有一个根结构

提供行为 提供样式

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9VeII1Zj-1692542151536)(C:\Users\念天\AppData\Roaming\Typora\typora-user-images\image-20230820180830087.png)]

普通组件的注册使用:

局部注册:只能在注册的组件内使用

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

2.在使用的组件内导入并注册

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GKxTOnZv-1692542151536)(C:\Users\念天\AppData\Roaming\Typora\typora-user-images\image-20230820181135626.png)]

使用时直接当成html标签来使用<组件名>

全局注册:所有组件内都能使用

1.创建.vue文件

2.main.js中进行全局注册

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I3Pw3qrZ-1692542151537)(C:\Users\念天\AppData\Roaming\Typora\typora-user-images\image-20230820182400324.png)]

选择第一个快速创建三个组成部分

在设置里面找到trigger on tab 就可以实现标签名+tab自动生成标签

scoped样式冲突

样式默认是全局样式,会影响所有组件

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

组件的data是一个函数->保证每个组件实例,维护独立的一份数据对象

也就是相同的组件,他们的数据是相互独立的

data(){

​ return{

​ count :999

​ }

}

组件通信:组件和组件之间传递数据

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

组件关系分类;

父子关系:

props和$emit

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x2RjwMgU-1692542151537)(C:\Users\念天\AppData\Roaming\Typora\typora-user-images\image-20230820191720107.png)]

子组件通过$emit通知父组件修改更新

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-K2ghrSPn-1692542151537)(C:\Users\念天\AppData\Roaming\Typora\typora-user-images\image-20230820191708679.png)]


props校验,为组件的prop指定验证要求,不符合要求,控制台就会有错误提示

类型校验:props: {

​ 校验的属性名: 类型

},

进行多个校验的时候,就不能只写键值对了,得写成是一个对象,里面多个属性进行校验

非空校验:required: true 是否必填

默认值:deafult

自定义校验: validator(传入的值){判断语句 return boolean}

prop&data 单向数据流

data的数据是自己的,可以随便修改

prop的数据是外部的,不能修改

非父子关系:

provide & inject跨层级共享数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KtqibUPj-1692542151537)(C:\Users\念天\AppData\Roaming\Typora\typora-user-images\image-20230820202140454.png)]

eventbus 事件总线

我们得先创建一个都能访问到达事件总线(空的Vuew实例 )

utils -> utils/EventBus.js

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DQtI6Mrb-1692542151538)(C:\Users\念天\AppData\Roaming\Typora\typora-user-images\image-20230820200341526.png)]

通用解决方案:Vuex(适合复杂业务场景)

共享数据,简单的数据类型是不会响应的,复杂的数据类型是响应式的

所有推荐使用复杂数据类型

v-model原理

v-model本质上是一个语法糖,比如说应用在输入框上,就是value属性和input属性的和写

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CquH5WY6-1692542151538)(C:\Users\念天\AppData\Roaming\Typora\typora-user-images\image-20230820204717803.png)]

通过 $event获取到当前输入框对象,

表单类组件封装 & v-model 简化代码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-it3EySbj-1692542151538)(C:\Users\念天\AppData\Roaming\Typora\typora-user-images\image-20230820205817981.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lu8Slf4A-1692542151539)(C:\Users\念天\AppData\Roaming\Typora\typora-user-images\image-20230820210159234.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1vWBLEfq-1692542151539)(C:\Users\念天\AppData\Roaming\Typora\typora-user-images\image-20230820210744335.png)]

sync修饰符

实现子组件和父组件的双向绑定,简化代码

prop属性名可以自定义,而v-model固定为value

-ref和$refs获取dom插件

Vue异步更新和$nextTick

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值