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的依赖收集机制
  • 都是被依赖的数据发生变化触发,进而进行改变
    、处理计算

不同点

  1. 入和出
    computed:多入单出-多个值变化,组成一个值的变化
    watch:单入多出-单个值的变化,进而影响一系列的变更。(这里的多出指的是,在声明的watch变量中,可以针对某一个变量的变化,改变其他变量的值)
  2. 性能上
    computed:会自动diff依赖,如果依赖没有变化,则直接从缓存中读取值
    watch:无论监听值是否变化,只能通过回调获取值
  3. 写法上
    computed:必须有return
    watch:可有可无,有的话也不影响
  4. 时机上
    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的作用
  1. 模板编译原理 - template => dom
    template=>匹配语法 — 生成AST(虚拟树) : 静态 + 动态 => 转换AST为可执行方法 => render() => dom
  2. 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'
})
  1. 抽象复用
  2. 精简
混入mixin - 逻辑混入
  1. 应用:抽离公共逻辑(逻辑相同,模板不同,可复用mixin)
  2. 合并策略:
    • 变量补充不会被覆盖
    • 生命周期在引用该mixin组件之前
    • 同样被引入的两个mixin,根据引用顺序安排加载顺序
继承拓展extends-逻辑上的共同扩展
  1. 应用:核心逻辑的功能继承
  2. 合并策略:
    • 变量补充,不会覆盖
    • 无论是业务代码还是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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/12788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JAVA进阶篇教学】第十六篇:Java中AOP使用

博主打算从0-1讲解下java进阶篇教学&#xff0c;今天教学第十五篇&#xff1a;Java中AOP使用。 AOP&#xff08;Aspect-Oriented Programming&#xff09;是一种编程范式&#xff0c;它允许开发者在不修改源代码的情况下&#xff0c;对代码进行横切关注点的分离和增强。在 Java…

CNAME记录

CNAME记录 维基百科&#xff0c;自由的百科全书 &#xff08;重定向自CNAME&#xff09; 真实名称记录&#xff08;英语&#xff1a;Canonical Name Record&#xff09;&#xff0c;即CNAME记录&#xff0c;是域名系统&#xff08;DNS&#xff09;的一种记录。CNAME记录用于…

mysqldump: Error 2013 导致mysql停止运行

https://www.cnblogs.com/DataArt/p/10173957.html 1 查询表大小 SELECT table_name AS "表名", round(((data_length index_length) / 1024 / 1024), 2) AS "大小(MB)" FROM information_schema.tables WHERE table_schema your_database_name AND …

Togaf培训简介

Togaf简单讲 1.定义事物&#xff0c;方便大家互相理解 2.做好现状和愿景设计 3.做好现状到愿景的计划 1.togaf 首先是统一语言。大家互相能理解&#xff0c;比如各种定义。 togaf源自美国军方理论 2.没有架构设计&#xff0c;烟囱式系统是必然的。 就跟之前去政府办户籍一…

抖店曝光率高,转化低,不知道怎么提升转化率?试试这四个方法

大家好&#xff0c;我是醒醒团队电商花花。 我们现在做抖音小店的商家或多或少都会遇到不出单&#xff0c;转化低的各种问题。 明明店铺的曝光不低&#xff0c;访客也不少&#xff0c;就是没转化。 下面我根据我们做店的经验&#xff0c;给大家分享一些问题所在&#xff0c;…

Git—安装及介绍

下载Git 官网地址&#xff1a;Git - Downloads (git-scm.com) 安装 双击安装包 点击 next 检查安装 桌面&#xff0c;右键鼠标&#xff0c;是否出现 Git GUI Here 和 Git Bash Here 打开Git Bash Here 输入命令 git --verison

NX/UG软件使用—策略OK回调环境变量

新建环境变量UGII_CAM_OPERATION_OK_EXIT&#xff0c;变量值为需要执行的xx.dll路径&#xff0c;设置后&#xff0c;重启NX&#xff0c;那么在每次点击策略OK之后&#xff0c;会自动执行xx.dll(注意这个dll需要在配置好的工具目录里&#xff0c;也就是说NX能手动加载这个dll)。…

finallyshell激活-支持所有版本(老版 + 最新版) + 所有平台(mac + windows)

一&#xff1a;打开finally shell的激活页面 二&#xff1a;点击离线激活 三&#xff1a;复制机器码&#xff0c;然后执行一下代码 原文&#xff1a;大哥原文&#xff0c;但是这个大佬是用java实现的&#xff0c;执行因为依赖的问题一直报错 基于以上问题&#xff0c;所以使…

YoLov9目标检测算法的使用

目录 一、环境安装 1、创建虚拟环境 2、安装依赖库 二、数据集准备 1、数据集的文件名 2、划分数据集 3、配置数据文件 4、修改模型结构文件的类别 5、下载模型预训练权重 三、训练 1、训练的三个文件介绍 2、训练 3、验证 4、检测单张图片 四、附录 1、训练参…

C#数据库密码加密保存和登录验证方法

目录 1. 使用哈希算法加密密码 2. 用户注册时加密密码并保存到数据库 3. 用户登录时验证密码 注意事项 如何实现加盐处理 安装BCrypt.Net包 密码哈希和验证 用户注册时加盐并哈希密码 用户登录时验证密码 1. 使用哈希算法加密密码 可以使用C#中的System.Security.Cryp…

01 区块链-- Smart Contract

Concept of Smart Contract 1. 智能合约并非区块链的专属 智能合约&#xff0c;就是一段部署在区块链里的代码。 合约有自己的地址&#xff0c;与该地址进行交易会触发代码运行&#xff0c;一旦某个事件触发合约中的条款&#xff0c;代码即自动执行。 也就是说&#xff0c;满…

上海市计算机学会竞赛平台2024年1月月赛丙组成绩等第

题目描述 给定一个在 00 到 100100 之间的整数 &#x1d44e;a&#xff0c;请将它转成等第&#xff0c;规则如下&#xff1a; 9090 或以上为 A8080 或以上为 B7070 或以上为 C6060 或以上为 D5959 或以下为 F 输入格式 单个数字表示 &#x1d44e;a 输出格式 单个字符表示…

c++快读快写

一般来讲&#xff0c;快读快写在针对数据量不是很大的输入输出的时候显得比较无力&#xff0c;但如果是多组数据或者输入量较多&#xff0c;就可以显著提升效率。 快读 一个一个字符读取比读入一个数字&#xff08;int&#xff09;快 inline int read(){int x 0, f 1;//in…

【前端】LayUI监听事件汇总

一、监听单选按钮事件 点击资源类型单选按钮时&#xff0c;请求后台接口&#xff0c;把接口返回的内容追加到选择资源下拉框内 HTML <div class"layui-form-item"><label class"layui-form-label">资源类型&#xff1a;</label><d…

【Python快速上手(二十四)】-Python3 JSON数据解析

目录 Python快速上手&#xff08;二十四&#xff09;Python3 JSON数据解析编码&#xff08;序列化&#xff09;解码&#xff08;反序列化&#xff09;读写JSON文件 Python快速上手&#xff08;二十四&#xff09; Python3 JSON数据解析 在Python 3中&#xff0c;使用JSON&…

6. 神经网络的内积

目录 1. 准备知识 1.1 NumPy 的多维数组 1.2 矩阵乘法 1.2.1 矩阵乘法顺序 1.2.2 矩阵乘法范例 2. 神经网络的内积 2.1 使用场合 2.2 Python 实现 1. 准备知识 1.1 NumPy 的多维数组 大家应该对多维数组都很熟悉&#xff0c;我不再多言。在 NumPy 模块中&#xff0c;…

声纹识别在无人机探测上的应用

无人机在民用和军事领域的应用越来越广泛。然而&#xff0c;随着无人机数量的增加&#xff0c;"黑飞"现象也日益严重&#xff0c;对公共安全和隐私构成了威胁。因此&#xff0c;开发有效的无人机探测与识别技术变得尤为重要。及时发现黑飞无人机的存在进而对其型号进…

AI地名故事:鸦岗村

鸦岗村&#xff0c;位于广州市白云区石井镇&#xff0c;是一个历史悠久、文化底蕴深厚的村落。据《广州地名志》记载&#xff0c;南宋时期&#xff0c;南雄珠玑巷的凌氏家族迁移至此地&#xff0c;并在此建立村落。由于村子周边的山岗上常有乌鸦栖息&#xff0c;因此得名“鸦岗…

Redisson中分布式锁的实现原理

redisson版本&#xff1a;3.27.2 简介 锁归根结底就是对同一资源的竞争抢夺&#xff0c;不管是在单体的应用亦或者集群的服务中&#xff0c;上锁都是对同一资源进行修改的操作。至于分布式锁&#xff0c;那就是多个服务器或资源&#xff0c;同时抢占某一单体应用的同个资源了。…

什么是Google SEO优化,如何做好谷歌seo排名?2024年谷歌搜索引擎优化(谷歌SEO)3分钟速通教程指南

1 - 什么是SEO&#xff1f; 谷歌排名优化&#xff08;SEO&#xff1a;Search Engine Optimization&#xff09;是指当您在谷歌搜索那里输入一个您正在推广的产品或服务的关键词时&#xff0c;如何在使您的站在Google里获得一个较高的排名位置而做的优化过程。谷歌排名优化的意…