Vue3 基本语法

Vue3 基本语法

尤雨溪

文章目录


前言

提示:这里可以添加本文要记录的大概内容:

学习前端Vue框架有以下几个原因:

  1. Vue是一种轻量级前端框架,易于学习和使用;
  2. Vue具有完善的文档和社区支持,可以轻松地找到解决问题的方法;
  3. Vue使用组件化的编程方式,可以帮助你更好地管理和组织代码;
  4. Vue具有丰富的生态系统,包括大量的第三方组件和插件,可以帮助你更快速地开发应用程序;
  5. Vue在移动端开发中有很好的表现,可以帮助你快速构建响应式的用户界面;
  6. Vue在大型项目中的性能表现也很好,可以满足高要求的开发需求。

Vue开发核心的关注点:数据的变化
简化DOM编程


提示:以下是本篇文章正文内容,下面案例可供参考

MVVM框架

在这里插入图片描述

认识Vue

vue.js的在线引用地址(vue 官方引入地址):

<script src="https://unpkg.com/vue@next"></script>

以下是使用Vue.js写一个简单的"Hello World"应用程序的示例:

  1. 引入Vue.js文件
  2. 创建vue实例对象,需要传入配置对象(最重要的:data)
  3. 将创建的vue实例对象,挂载到视图中某个标记上(vm.mount(‘#xxx’) CSS语法)
  4. 最大的div内使用插值语法

【示例代码】:

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><div id="app"><!--4.输入框的数据改变,同步到title(指明h1内容就是title内容)插值语法 --><h1>{{title}}</h1></div></body><!--1.引入vue js文件(这里可以替换成网页) --><script src="./js/vue3.js"></script><script>// 2.创建vue实例对象,需要传入配置对象// 配置对象中需要指定若干个配置项 data代表数据配置项let vm = Vue.createApp({data(){return{title:'Hello World'}},})// 3.将创建的vue实例对象,挂载到视图中某个标记上 vm.mount('#app')// css选择器思想</script></html>

输出效果:

在这里插入图片描述


上面是单项绑定,下面是双向绑定

<body><div id="app"><!--4.输入框的数据改变,同步到title(指明h1内容就是title内容)插值语法 --><h1>{{title}}</h1><input type="text" v-model="title"></div></body>

输出效果:

在这里插入图片描述


在输入框内更改内容,上面h1内容也会随之改变

在这里插入图片描述

文本渲染指令 v-text

v-text指令:

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><div id="app"><div v-text="x"></div></div></body><script src="../js/vue3.js"></script><script>let vm = Vue.createApp({data(){return{x:'<h1>xxx</h1>'}},}) vm.mount('#app')</script></html>

输出效果:
把里面内容当做纯文本写出

在这里插入图片描述


把v-text改成插值语法:

<body><div id="app"><div>{{x}}</div></div></body>

效果一样

在这里插入图片描述


v-text 修改innerText属性 v-html修改innerHtml 属性
v-text 等同于{{插值语法}}

属性绑定指令

它可以动态地绑定一个属性的值。
可以将一个组件的class属性绑定到Vue实例中的一个数据属性上,以实现动态的样式控制

title 属性动态绑定

和class和style属性绑定类似,通过v-bind指令,我们可以将元素的title属性与Vue实例中的数据属性绑定起来,实现动态绑定,当绑定的数据属性发生变化时,title属性的值也会随之动态更新,从而实现动态绑定

【示例代码】:

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><div id="app"><a :href="address">跳转</a></div></body><script src="../js/vue3.js"></script><script>let vm = Vue.createApp({data(){return{address:'https://rej177.blog.ZEEKLOG.net/article/details/131444680'}},}) vm.mount('#app')</script></html>

输出结果

在这里插入图片描述

class属性动态绑定

可以将一个或多个class类名与Vue实例中的数据属性进行绑定,当数据属性的值发生变化时,class类名也会随之动态更新

【示例代码】:

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>.one{color: aqua;}.two{color: yellowgreen;}.three{ font-size: 50px;}</style></head><body><div id="app"><p :class="className">杰瑞</p><p :class="[className,className1]">汤姆</p><p :class="{one: flag}">斯派克</p></div></body><script src="../js/vue3.js"></script><script>let vm = Vue.createApp({data(){return{className:'two',// 改成one变成湖绿色// className: 'one',// 多个属性配置中间加逗号分割className1:'three',flag:true,// true生效,false不生效}},}) vm.mount('#app')</script></html>

输出效果:

在这里插入图片描述

style 属性动态绑定

可以将一个或多个样式属性与Vue实例中的数据属性进行绑定,当数据属性的值发生变化时,样式属性也会随之动态更新

【示例代码】:

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><div id="app"><p :style="{textAlign: a,backgroundColor: b}">二哈喇子!</p></div></body><script src="../js/vue3.js"></script><script>let vm = Vue.createApp({data(){return{a:'center',b:'pink'}},}) vm.mount('#app')</script></html>

输出效果:

在这里插入图片描述

事件绑定 @事件名

Vue中事件执行的函数,必须编写在methods配置项中

methods函数体中想要访问data配置项中配置的数据,必须加this.前缀

【示例代码】:

模拟购物车的加减数据

在这里插入图片描述
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><!-- Vue开发两个最基本的最重要的配置项是 data 和 methods --><!-- Vue开发核心的关注点:数据的变化 --><div id="app"><button @click="minus">-</button>{{num}}<button @click="plus">+</button><!-- 事件绑定是 v-on事件名 简写成:@事件名 --><div @click="b" style="width: 200px;height: 200px;border: 1px solid red;"><div @click.stop="a" style="width: 50px;height: 50px;background-color: yellow;"></div></div></div></body><script src="../js/vue3.js"></script><script>let vm = Vue.createApp({data(){return{num:1}},// Vue中事件执行的函数,必须编写在methods配置项中methods:{// methods中定义的函数,function可以省略plus:function(event){ event.preventDefault()// methods函数体中想要访问data配置项中配置的数据,必须加this.前缀this.num++},minus:function(event){ event.preventDefault()if(this.num >0){this.num--}},a:function(){ console.log('点击子标记')},b:function(){ console.log('点击父标记');}},}) vm.mount('#app')</script></html>

输出效果:

在这里插入图片描述

上述代码是一个基本的 Vue 应用,实现了一个计数器和一个嵌套的 div 元素,其中包含一个子元素。下面是代码的详细解释:

这段代码是一个基本的 HTML + Vue.js 页面,它包含了一个加减按钮和一个反弹的黄色小方块。

这个页面的主要步骤如下:

  1. 在页面头部使用<script>标签引入 Vue.js 库。
  2. 在页面的<body>标签中添加一个<div>标签,它有一个 ID 属性值为“app”。
  3. 在这个<div>标签中添加两个按钮,分别是“+”和“-”,并绑定对应的事件处理函数 plus 和 minus。
  4. 在这个<div>标签中添加一个反弹的黄色小方块,它有一个父元素和一个子元素。我们可以通过给这两个元素绑定鼠标点击事件来观察事件冒泡和阻止冒泡的效果。
  5. 在标签底部使用<script>标签定义一个 Vue 实例 vm,并在实例中定义 data 属性和 methods 方法。
  6. data 属性中只有一个数值类型变量 num,表示当前数值。
  7. methods 方法中包含了四个函数 plus、minus、a 和 b,分别用于增加数值、减少数值、输出点击子标记和输出点击父标记。
  8. 使用 vm.mount 方法将 Vue 实例挂载到页面中的 app 元素上。

当用户在页面上点击加减按钮或小方块时,Vue 实例会执行对应的函数来改变数据,并将改变后的数据重新渲染到页面上。同时也能看到事件冒泡和阻止冒泡的效果。

条件渲染指令

条件渲染指令是指在前端框架(如Vue、React等)中,根据条件判断是否渲染DOM节点的指令。
在Vue中,条件渲染指令包括v-ifv-show两种:

v-if

v-if指令会根据表达式的值(true或false)来添加或删除DOM节点,如果值为false,则节点会从DOM中删除;如果值为true,则节点会添加到DOM中。
该指令的优点是可以节省DOM节点的渲染,但缺点是在条件切换时会重新渲染整个节点。

【示例代码】:

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><div id="app"><div v-if="isShow">条件渲染</div><div v-if="price<=800">价格太贵了,买不起</div></div></body><script src="../js/vue3.js"></script><script>let vm = Vue.createApp({data(){return{// 显示的值为true时会显示出来isShow:true,// 默认不显示,只有price<=800时会显示price:900}},}) vm.mount('#app')</script></html>

❗v-if 和 v-show

v-ifv-show区别:

1、v-if是真正的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子组件适当地被销毁和重建。
2、v-if是惰性的,只有当条件为 true 时才会渲染,如果条件为 false 则什么都不做
3、v-if有很高的切换开销,适用于条件不太容易改变的时候
4、v-show不管条件是 true 还是 false 都会进行渲染。并且只是简单地基于CSS进行切换
5、v-show有很高的初始渲染开销,适用于非常频繁地切换

【示例代码v-if】:

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><div id="app"><div v-if="flag">hello world</div><button @click="change">切换</button></div></body><script src="../js/vue3.js"></script><script>let vm = Vue.createApp({data(){return{flag:true}},methods:{change(){this.flag=!this.flag }},}) vm.mount('#app')</script></html>
请添加图片描述


【示例代码v-show】:
把第十行的<div v-if="flag">hello world</div>换成v-show

请添加图片描述

v-else 和 v-else-if

该示例中还引入了Vue 3的JS文件vue3.js,并在HTML的尾部使用vm.mount挂载Vue实例到<div>处,从而使得Vue能够监视和响应数据的变化,实现动态更新页面内容

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><div id="app"><div v-if="type==1">A</div><div v-else-if="type==1">B</div><div v-else>C</div></div></body><script src="../js/vue3.js"></script><script>let vm = Vue.createApp({data(){return{type:1}},}) vm.mount('#app')</script></html>

如果type等于1,则显示文本“A”;
如果type不等于1,但等于1的话,则显示文本“B”;
如果type既不等于1也不等于2,则显示文本“C”。

循环遍历指令 v-for

循环指令要放在对应的位置,并不是那个最大的标记

在 Vue 中,可以使用 v-for 指令来循环遍历数组或对象,并生成相应的元素。

<div v-for="(item, index) in items">{{ index }}-{{ item }}</div>

其中,items 是要遍历的数组或对象,item 表示当前循环的元素,index 表示当前元素的索引。

如果是数组,index 就是当前元素的下标;
如果是对象,index 就是当前元素的键名。

除了数组和对象,还可以循环遍历数字,例如:

<div v-for="i in 5">{{ i }}</div>

上述代码会生成 5 个 div 元素,分别显示数字 1 到 5。

【循环遍历指令示例代码】:

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title></head><body><div id="app"><ul><li v-for="game in arr">{{game}}</li></ul></div></body><script src="../js/vue3.js"></script><script>let vm = Vue.createApp({data(){return{arr:['我的世界','英雄联盟','CS:GO']}},}) vm.mount('#app')</script></html>

输出效果:

在这里插入图片描述

【例】Vue商品列表删除操作

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>商品列表</title><style> table{width:100%; border-collapse: collapse;border: 1px solid #298cce; margin-top: 20px;} th, td{padding: 10px; text-align: center;border: 1px solid #298cce;} th{ background-color: #f2f2f2;}tr:nth-child(even){ background-color: #f2f2f2;} button{ background-color: #298cce;color: #fff;border: none;padding: 6px 10px;cursor: pointer;}</style></head><body><div id="app"><table><caption><h2>商品列表</h2></caption><thead><tr><th>序号</th><th>品牌</th><th>型号</th><th>成色</th><th>售后服务</th><th>连接方式</th><th>套餐类型</th><th>价格</th><th>操作</th></tr></thead><tbody><tr v-for="(goods, index) in goods"><td>{{index+1}}</td><td>{{goods.brand}}</td><td>{{goods.model}}</td><td>{{goods.fineness}}</td><td>{{goods.after}}</td><td>{{goods.connection}}</td><td>{{goods.type}}</td><td>{{goods.price}}</td><td><button @click="del(index)">删除</button></td></tr></tbody></table></div></body><script src="../js/vue3.js"></script><!-- 代替vue.js网页 --><script>let vm = Vue.createApp({data(){return{goods:[{brand:'OPES',model:1.0,fineness:'全新',after:'一年质保',connection:'有线/无线',type:'基础版',price:'500',},{brand:'OPES',model:1.0,fineness:'全新',after:'两年质保',connection:'有线/无线',type:'进阶版',price:'600'},{brand:'OPES',model:1.0,fineness:'全新',after:'一年质保',connection:'无线',type:'战损版',price:'500'},{brand:'OPES',model:1.0,fineness:'全新',after:'两年质保',connection:'有线/无线',type:'高级版',price:'700'},]}},methods:{del(i){this.goods.splice(i,1)}},}) vm.mount('#app')</script></html>

输出效果:

在这里插入图片描述

【例】遍历商家

遍历,遍历的是数据,写在li里面

<!-- 商家列表 --><ul class="business-list"><!-- 使用 v-for 遍历 items 数组,将每个商家信息动态显示在页面上 --><li v-for="(item, index) in items":key="index" @click="gotofood(index)"><img src="../assets/img/sj01.png" alt=""><div class="business-info"><!-- 商家名字信息 --><div class="business-name"><h3>{{ item.businessName }}</h3><div>&#8226;</div></div><!-- 商家星级 --><div class="business-star"><div class="business-star-left"><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><i class="fa fa-star"></i><p>4.9 月售1000单</p></div><div class="business-star-right"> 商家配送 </div></div><!-- 商家配送 --><div class="business-delivery"><p>&yen;{{ item.startPrice }}元起送 |&yen;{{ item.deliveryPrice }}元配送</p><p>2.3KM |18分钟</p></div><!-- 商家说明 --><div class="business-explain"><div>{{ item.businessExplain }}</div></div><!-- 商家活动 --><div class="business-promotion"><div class="business-promotion-left"><p>新</p><p>新用户首单白嫖</p></div><div class="business-promotion-right"><p>2个活动</p><i class="fa fa-caret-down"></i></div></div></div></li></ul>

items 要写在data中,他是个数据,用数组形式
gotofood 是上面定义的事件,要写在方法methods

// 定义数据 data(){return{items:[],// 存储商家信息}},methods:{gotofood(index){// 点击商家跳转到商家页面,并将商家信息存储在 session 中 router.push('/food') sessionStorage.setItem('business',JSON.stringify(this.items[index]))}},

效果:

在这里插入图片描述

Read more

为OpenClaw构建双层记忆系统:QMD + Mem0的混合架构实战

# 引言 作为一名重度使用AI助手的开发者,我一直面临一个核心问题:**如何让AI真正"记住"知识,而不是每次对话都从零开始?** 传统的云端记忆方案虽然强大,但存在几个痛点: - API调用成本和延迟 - 搜索实时性不足 - 缺乏对本地工作区文档的快速检索能力 今天,我为OpenClaw(一个开源AI Agent系统)构建了一个**本地+云端混合的双层记忆架构**,实现了毫秒级本地检索与深度语义理解的完美结合。 --- ## 第一部分:QMD本地搜索的Windows集成之旅 ### 初始尝试 QMD是一个本地文档搜索引擎,支持BM25关键词搜索和语义向量搜索。它使用SQLite存储索引,理论上非常适合作为本地记忆底层。 安装过程看起来很简单: ```bash bun install -g github:tobi/qmd bunx tsx src/qmd.ts --help ``` ### Windows噩梦:better-sqlite3编译失败 问题来了:

By Ne0inhk
企业级部署升级:Nginx 反向代理 + ELK 日志监控,让成绩预测平台稳定可追溯

企业级部署升级:Nginx 反向代理 + ELK 日志监控,让成绩预测平台稳定可追溯

⭐️个人主页:秋邱-ZEEKLOG博客 📚所属栏目:python 前言 上一期的 Docker+Linux 部署,让成绩预测平台实现了局域网共享,但真正落地到团队 / 学校使用,还缺两个关键支撑:访问体验不够专业(IP + 端口难记、无加密),运维排查全靠 “猜”(日志分散、无监控)。 这一期,我们跳出 “步骤式部署” 的框架,以 “问题驱动 + 场景落地” 为核心,先拆解企业级部署的核心诉求,再分模块实现 Nginx 域名化改造和 ELK 日志监控,最后通过实战验收和运维手册,让你既能搞定部署,又能轻松应对后续运维问题,全程聚焦 “实用、稳定、可追溯”。 一、企业级部署的 3 个核心诉求(先明确目标再动手) 为什么互联网公司都在用 “Nginx+ELK”

By Ne0inhk
周红伟:独家揭秘,DeepSeek-V4 深度技术报告:原生多模态架构

周红伟:独家揭秘,DeepSeek-V4 深度技术报告:原生多模态架构

报告编号:DTR-2025-V4-001 发布日期:2024年5月23日 撰写机构:AI架构实验室 / 独立技术分析组 字数统计:约 5200 字 1. 执行摘要 (Executive Summary) 在人工智能大模型竞争进入“后训练时代”的关键节点,深度求索(DeepSeek)即将发布的下一代旗舰模型 DeepSeek-V4 标志着中国AI基础设施在架构效率、多模态融合及国产硬件适配上实现了质的飞跃。不同于国际巨头单纯依赖算力堆叠的“暴力美学”路径,DeepSeek-V4 通过原生多模态架构、Engram条件记忆机制、双轴稀疏(Dual-Sparse)架构以及DualPath智能体推理框架四大核心技术支柱,在万亿级参数规模下实现了推理成本降低90%、长文本处理能力提升8倍、国产芯片算力利用率突破85%的惊人指标。 本报告将从技术原理、架构创新、性能基准、成本控制及国产算力生态五个维度,深度剖析DeepSeek-V4如何通过“算法-系统-硬件”的协同设计,打破英伟达CUDA生态的垄断,为全球AI发展提供“中国效率”的全新范式。 DeepSeek-V4 vs

By Ne0inhk
SQL Server 2025数据库安装图文教程(附SQL Server2025数据库下载安装包)

SQL Server 2025数据库安装图文教程(附SQL Server2025数据库下载安装包)

SQL Server是由微软推出的关系型数据库管理系统,它提供了可靠的数据存储、数据管理和数据分析功能。SQL Server支持多种数据处理功能,包括事务处理、数据分析、报表生成和数据挖掘等,因此在企业和组织中得到广泛应用。 演示系统:Windows server 2025数据中心版 安装包:下载传送门 1、下载并解压安装包,找到解压的安装包,双击【setup.exe】 2、双击【setup.exe】就会打开SQL Server安装中心,点击【安装】-【全新安装或向现有安装添加功能】 3、选择对应版本后,下一步 4、勾选“我接受许可条款”后下一步 5、下一步下一步 6、不勾选,下一步 7、勾选需要的功能,路径建议默认,下一步 8、下一步

By Ne0inhk