vue基础+高级用法
一、vue基础用法
mvvm的了解/认知
- 语义化模板
- mvc - model view controller
- mvvm - model view view-model
vue是如何利用mvvm思想进行开发
双向数据绑定
- 花括号,构建了数据与视图的双向绑定
- 通过视图绑定事件,来处理数据
生命周期-vue示例
- 建立:beforeCreate=>created=>beforeMount=>mounted
- 更新:beforeUpdate=>updated
- 销毁:beforeDestory=>destoryed
生命周期-过程
- bC:new Vue() - 实例挂载功能
- c:data、props、methods、computed - 数据操作,不涉及vdom和dom
- bM:vDom - 围绕vDom做的数据操作,但是不涉及dom
- m:dom-任何操作
- bU:bDom更新了的,但是dom还没更新-可以更新数据
- u:dom已经更新了,但是谨慎操作数据
- bD:实例vm尚未被销毁-eventBus、store、计时器销毁
- d:实力完全被销毁-收尾
定向监听 (watch和computed)
相同点
- 基于vue的依赖收集机制
- 都是被依赖的数据发生变化触发,进而进行改变
、处理计算
不同点
- 入和出
computed:多入单出-多个值变化,组成一个值的变化
watch:单入多出-单个值的变化,进而影响一系列的变更。(这里的多出指的是,在声明的watch变量中,可以针对某一个变量的变化,改变其他变量的值) - 性能上
computed:会自动diff依赖,如果依赖没有变化,则直接从缓存中读取值
watch:无论监听值是否变化,只能通过回调获取值 - 写法上
computed:必须有return
watch:可有可无,有的话也不影响 - 时机上
computed:从首次生成就赋值,开始运行了
watch:首次默认不执行,可以通过immediate:true
条件v-if & v-show & v-else & v-else-if
- v-if无dom,不会渲染实际节点和其子节点
- v-show存在实际节点和其子节点,但不展示、不占位
v-for+key
v-for & v-if 循环的优先级
在vue2.x中,v-if和v-for同时使用,v-for优先级更高
在vue3中,v-if始终高于v-for
key的作用
- 模板编译原理 - template => dom
template=>匹配语法 — 生成AST(虚拟树) : 静态 + 动态 => 转换AST为可执行方法 => render() => dom - key作用
dom diff - 单层复用、双向指针、优先服用
key => 快速识别节点的可复用
默认指令
v-once - 只渲染一次
v-text - 只渲染字符串
v-html -渲染html,慎用,防止攻击脚本的注入
v-model - 双向绑定 => :value + @input
二、vue进阶
特征一:模板化
插槽:组件外部维护参数以及结构,内部安排位置
- 面试点 => 默认插槽实现的方式 => 整个插槽的聚合(将所有的节点整合在一起,插入到对应默认插槽的位置)
- 问题 => 多个插槽节点分开布局 => 具名插槽
具名插槽 - 通过name标识插槽身份,从而在组件内部区分
- 面试点 => 所有插槽都是通过name索引,默认插槽其实通过”default“索引。name索引的其实是一段解析上下文的空间
- 参数的传递、参数的隔离
- 问题 => 插槽参数自管理 => 作用域插槽
作用域插槽
外部做结构描述勾勒,内部做传参
- 结构化的传递(jsx)
//具名插槽
let slotNode_header = (<div>vue header</div>)
//作用域插槽
let scope_slot_content = slotProps => {return (<div>{slotProps}</div>)}render() {return (// slotNode_headerscope_slot_content())
}
App.vue
<template><div><HelloWorld>//默认插槽<p>{{msg1}}</p><p>{{msg2}}</p><p>{{msg3}}</p>//具名插槽<template v-slot:header>{{headerMsg}}</template>//作用域插槽<template slot="content" slot-scope="{slotProps}">{{slotProps}}</template>//作用域插槽新版本写法<template v-slot:slotProps="slotProps">{{slotProps}}</template></HelloWorld/></div>
<template>
HelloWorld.vue
<template><div>//默认插槽<slot></slot>//具名插槽<slot name="header"></slot>//作用域插槽<slot name="content" :slotProps="slotProps"></slot></div>
<template>
模板的二次加工
- watch 、computed => 数据与数据之间的加工
- 复杂的模板相关数据计算
- 方案一:函数(methods) | 过滤器(filters) => 过滤器拿不到实例
- 方法二:v-html - 逻辑运算 + 结构拼装 => 安全性
- 方案三:jsx优点和劣势 => template=>render=>vm.render() diff key 直接绕过template使用render渲染,但是强更新,如果稍微有变量等变化的话,会重新更新render函数
语法糖实现
options : [{value:1},{value:2}]
render(h){const Node = (<p>{this.num>100?100:this.num}</p>)const handleChange = ()=>{}// return Nodereturn (<ul>{//v-forthis.options.map(item=>{return (//嵌入// <itemNode></itemNode>//v-model<itemNode item={item} value={item.value} onInput={this.handleChange}><Node/> </itemNode>)})}</ul>)
}
特征二:组件化
Vue.component('component',{template:'<h1>xxx</h1>'
})
new Vue({el:'#app'
})
- 抽象复用
- 精简
混入mixin - 逻辑混入
- 应用:抽离公共逻辑(逻辑相同,模板不同,可复用mixin)
- 合并策略:
- 变量补充不会被覆盖
- 生命周期在引用该mixin组件之前
- 同样被引入的两个mixin,根据引用顺序安排加载顺序
继承拓展extends-逻辑上的共同扩展
- 应用:核心逻辑的功能继承
- 合并策略:
- 变量补充,不会覆盖
- 无论是业务代码还是mixin都在extends之后
extend.js
export default{data(){return {msg:'xxx'}},created(){console.log('extend') }
}
helloword.vue
export default{mixins:['mixin1'],extends:['extend']data(){return {msg:'xxx'}},created(){console.log('extend') }
}
执行顺序:extends > mixin > 引入组件
整体拓展类 - extend
从预定的配置中拓展出来一个独立的配置项进行合并
main.js
xxxxxx
new Vue({el:'#app',component:{App},template:'<App/>'
})
//构造一个扩展器
let _baseOptions = {data:function(){return {course:'xx',session:'vue'}}
}
const BaseComponent = Vue.extend(_baseOptions)
new BaseComponent({created(){console.log('extend componets')}
})
以上方法基于vue2的写法,vue3写法如下,不再使用mixin,extends等拓展
addon.js
import {reactive} from 'vue'
export default function addon(){const title = 'xxx'const obj = reactive({name:'xxx',value:'xxx'})return {title,obj}
}
引入方
<script setup>
import addon from 'addon.js'
const {title:title1,obj:obj1} = addon
</script>
相关文章:
vue基础+高级用法
一、vue基础用法 mvvm的了解/认知 语义化模板mvc - model view controllermvvm - model view view-model vue是如何利用mvvm思想进行开发 双向数据绑定 花括号,构建了数据与视图的双向绑定通过视图绑定事件,来处理数据 生命周期-vue示例 建立&…...

鸿蒙应用布局ArkUI【基础运用案例】
布局基础运用案例 平级导航的复合网格视图 平级导航的复合网格视图常出现在同时展示多种不同内容的界面。 例如,市场类应用作为典型的平级导航,其首页不同板块采用了不同布局能力。 标题栏与搜索栏:因元素单一、位置固定在顶部,…...

GD32F103RCT6/GD32F303RCT6-UCOSIII底层移植(1)工程建立
本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 后续项目主要在下面该专栏中发布: 手把手教你嵌入式国产化_不及你的温柔的博客-CSDN博客 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转: 手把手教你嵌入式国产化-实战项目-无刷电机驱动&am…...
在本地设备上配置 Git 忽略特定文件
在本地设备上配置 Git 忽略特定文件 在日常的 Git 使用中,有时我们希望某些文件只在本地设备上被忽略,而不影响其他团队成员或设备。这篇博客将介绍如何在特定设备上配置 Git 忽略规则,使得一个文件不会被提交。 背景 通常,我们…...
cin.ignore()函数和stoll函数
cin.ignore()函数 cin.ignore() 是一个非常实用的函数,主要用于控制输入流 cin 的行为 cin.ignore(int n 1, char delimiter EOF); n:一个整数参数,表示要忽略的字符数量。默认值是1,意味着只忽略下一个字符。delimiter&#x…...

win11快速安装mysql数据库系统
win11快速安装mysql数据库系统 1、下载 1.1 打开官网 1.2 向下滚动页面 1.3 进入下载选项 1.4 下载8.0.4 LTS 1.5 开始下载 1.6 下载中 2、解压 大家注意,此时解压后目录是没有data目录的。 3、数据库初始化 3.1 管理员身份打开CMD 开始菜单上,输入…...

C# WinForm —— 21 RichTextBox 使用
1. 加载文件到控件中 加载文件时,要设置文件的路径和类型RichTextBoxStreamType,文件类型包含: RichText 0:富文本格式(RTF)流PlainText 1:纯文本流对象链接和嵌入(OLEÿ…...

【数据结构】堆(超详细)
文章目录 前言堆的概念及结构堆的实现堆的向下调整算法(建小堆为例)堆的向上调整算法(建小堆为例)堆的初始化销毁堆堆的插入堆的删除(规定删堆顶的数据)取堆顶元素判断堆是否为空获取堆的个数 完整代码(包括测试代码&a…...
常用正则 JS 持续更新
应用版本号正则验证 正则判断版本号(如:1.2.3 或 1.2.3.4),不允许出现 0.x.x;01.x.x; x.0x.x; x.00.x; x.x.00; x.x.0x/ ^ ([ 1-9 ] \d | [ 1-9 ])( . ([ 1-9 ] \d | \d )) {2,3} $ /0-10 保留一位小数的数…...

YOLO v6 iou_loss dfl_loss一直为0
Question img record infomation path is:…/mydata/images.train_cache.json Train: Final numbers of valid images: 1248/ labels: 1248. 0.1s for dataset initialization. img record infomation path is:…/mydata/images.val_cache.json Convert to COCO format 100%|█…...

FreeRTOS【4】线程挂起和恢复
1.开发背景 基于上一篇指引,成功创建并启动线程后,线程已经开始运行了,但是有时我们需要线程暂停运行,例如某个线程是控制 LED 闪灯的,如果现在需要让 LED 停止工作,单纯的关闭 LED 是没用的,因…...
CPU占用率过高排查
CPU占用率高是设备本身的一种现象,直观表现为display cpu-usage命令查询结果中整机CPU占用率“CPU usage”偏高,如超过70%。在网络运行中CPU高常常会导致其他业务异常,如BGP震荡、VRRP频繁切换、甚至设备无法登录。 通常,整机CPU占…...

关于 vs2019 c++20 规范里的 STL 库里模板 decay_t<T>
(1) 这个模板,在库代码里非常常见。 decay 英文是“衰弱,消减” 的意思,大概能感觉到就是要简化模板参数 T 的类型,去掉其上的修饰符。因为常用且复杂,故单独列出其源码和注释。先举例其应用场景…...

android C++打印堆栈
Android在Java层打印堆栈比较方便,代码如下: try {throw new Exception("Debug xxx call stack"); }catch(Exception e) {e.printStackTrace(); }但是在C模块中能打印调用堆栈吗?怎么打印调用栈呢? 答案是肯定的&…...
MySQL Undo Log、Redo Log、bin Log
Undo Log 回滚日志,用于将数据回滚到之前的状态。 MySQL在进行数据的增、删、改时,会将数据写入到Undo Log日志中。 对于Undo Log存在着insert和update两种类型的数据。插入语句对应的是insert类型,修改、删除语句对应的是update类型。 U…...
vld.ini配置文件说明
vld.ini配置文件说明 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; Visual Leak Detector - 初始化/配置文件 ;; 版权所有 (c) 2005-2017 VLD团队 ;; ;; 本库是自由软件;你可以在自由软件基金会发布的GNU宽通用公共…...

NSS【web】刷题
[SWPUCTF 2021 新生赛]jicao 类型:PHP、代码审计、RCE 主要知识点:json_decode()函数 json_decode():对JSON字符串解码,转换为php变量 用法: <?php $json {"ctf":"web","question"…...
将TailwindCSS默认单位rem转换为px
前言: 我这里需要将 默认的rem 转换为 px 原因是要使用 postcss-px-to-viewport 插件做移动端适配。 在tailwind.config.js文件中进行配置: 注意:这里 padding(内边距)、spacing(外边距)、width…...
命令模式(命令)
命令模式 文章目录 命令模式什么时命令模式通过示例了解命令模式 什么时命令模式 命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作。 通过示例了解命令模…...

Android ashmem 原理分析
源码基于:Andoird U Kernel-5.10 0. 简介 ashmem 称为匿名共享内存(Anonymous Shared Memory),它以驱动程序的形式实现在内核空间中。它有两个特点: 能否辅助内存管理系统来有效地管理不再使用的内存块(pin / unpin); 通过Bind…...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
tomcat指定使用的jdk版本
说明 有时候需要对tomcat配置指定的jdk版本号,此时,我们可以通过以下方式进行配置 设置方式 找到tomcat的bin目录中的setclasspath.bat。如果是linux系统则是setclasspath.sh set JAVA_HOMEC:\Program Files\Java\jdk8 set JRE_HOMEC:\Program Files…...