Vue基本语法
Options API
选项式/配置式api
- 需要在script中的export default一个对象
- 对象中可以包含
data
、method
、components
等key - data是数据,数据必须是一个方法(如果是对象,会导致多组件的时候,数据互相影响,因为对象赋值后,都是指向同一个内存地址,当然,在最新的vue版本中,如果不是对象会直接报错)
- method中可以写一些方法,在方法中,可以用
this.xxx
访问其他方法和data
中的数据
问题:
- data、method等分别存放,看起来是规范了,但是对于业务不友好,业务代码会分散到各个地方
- this的指向很耗费心神,稍有不慎,this的指向就会错误
1.响应式基础
data 数据定义 ,声明响应式状态
选项式 API 时,会用 data
选项来声明组件的响应式状态。此选项的值应为返回一个对象的函数比,对象里面的属性就是要定义的变量,并且具有响应式。Vue 将在创建新组件实例的时候调用此函数
<script>
exportdefault {data() {return {title: 'helloworld'}},
}
</script>
2 双大括号语法(Mustache语法)
- 用于将
data
中的数据展示到dom中去 - 里面也可以写变量表达式,如
{{true?'真的':'假的'}}
{{name}}
页面输出变量内容
使用插值表达式{{}}
<script>exportdefault {data() {return {title: "helloworld",};},};
</script>
<template><div><h1>{{title}}</h1>//插值使用{{}}</div>
</template>
<style>
</style>
3.页面元素的属性绑定
vue使用v-bind指令给页面元素的属性响应式的绑定属性,插值表达式{{}}不能在 HTML 的标签上面中使用。想要响应式地给标签绑定一个属性,应该使用 v-bind 指令
v-bind的语法: v-bind:属性名称=”变量名”可以简写成: :属性名称=”变量名”
如果绑定的值是 null 或者 undefined,那么该 属性将会从渲染的元素上移除。
<script>exportdefault {data() {return {title: "helloworld",};},};
</script>
<template><div><h1 v-bind:id="title">{{title}}</h1><h1 :id="title">{{title}}</h1> //简写<input type="text"v-bind:value="title"></div>
</template>
<style>
</style>
4.methods 方法定义 ,声明方法
要为组件添加方法,我们需要用到 methods
选项。它应该是一个包含所有方法的对象:
<script>
exportdefault {data() {return {count: {}}},methods: {increment() {this.count++}},
}
</script>
Vue 自动为 methods
中的方法绑定了永远指向组件实例的 this
。这确保了方法在作为事件监听器或回调函数时始终保持正确的 this
。你不应该在定义 methods
时使用箭头函数,因为箭头函数没有自己的 this
上下文。
5.页面事件绑定
vue可以在页面绑定方法,v-on用于监听DOM事件,并在触发事件时执行相应的方法或逻辑。它的作用是将事件与Vue实例中的方法进行绑定,实现事件处理和响应
语法:<div v-on:事件名称=”方法名称”></div> 简写为 @事件名称=”方法名称”
<script >export default {data() {return {title: "helloworld",};},methods: {getValue() {console.log("点击了");},},};
</script>
<template><div><h1 v-bind:id="title"v-on:click="getValue">{{title}}</h1><h1 :id="title"@click="getValue">{{title}}</h1><input type="text"v-bind:value="title"></div>
</template>
<style >
</style>
6.组件引入和使用
- 创建组件
单独创建一个.vue结尾的文件,在里面放入组件内容
- 引入组件
import 组件名称 from '组件地址'
例如
import HelloWorld from './components/HelloWorld.vue'
- 注册组件
通过components属性注册组件,组件不注册无法使用
例如
export default {name: 'App',data() {return {count: 0}},methods: {increment() {this.count++},decrement() {this.count--}},components: {HelloWorld}
}
- 使用组件
<template><div>{{ count }}<button @click="increment" >加1</button><button v-on:click="decrement">减1</button></div><HelloWorld msg="Vite + Vue" />
</template>
2.Composition Api
组合式api
1.响应式基础
ref()数据定义
ref()接受一个初始值,返回一个响应式的、可更改的 ref 对象,此对象只有一个指向其内部值的属性 .value
。
const count = ref(0)
console.log(count.value) // 0count.value++
console.log(count.value) // 1
ref 对象是可更改的,也就是说你可以为 .value
赋予新的值。它也是响应式的,即所有对 .value
的操作都将被追踪,并且修改会触发页面的更新
reactive()对象定义
reactive()返回一个对象的响应式代理。
创建一个响应式对象
const obj = reactive({ count: 0 })
obj.count++
setup()钩子函数
配置式api使用起来太过麻烦,所以组合式api来了,首先就是数据定义的区别,组合式api刚出来的时候使用setup钩子函数来实现对属性状态的管理
Vue3中代码中必须要有这个函数,setup()
函数会在组件初始化的时候执行,其主要目的是以原生js的方式设置组件的数据和方法等。
setup()
函数会返回一个对象,对象会暴露给模板和组件实例。其他的地方也可以通过组件实例this来获取 setup()
暴露出来的属性
- 在script中定义
setup
属性,这个属性是一个方法,方法的返回是一个对象 - 这个对象中的每一个属性,都可以被视作一个变量,都能够直接拿到dom中进行使用
<script>
import { ref } from 'vue'export default {setup() {const count = ref(0)// 返回值会暴露给模板和其他的选项式 API 钩子return {count}},mounted() {console.log(this.count) // 0}
}
</script><template><button @click="count++">{{ count }}</button>
</template>
更简单的操作
setup语法糖
vue3.2的setup语法糖没有this,只需在script标签中添加setup,可以帮助我们解决这个问题。组件只需引入不用注册,属性和方法也不用返回, 也不用写setup函数,也不用写export default
<script setup>import { ref } from "vue";const msg = ref("这是第一条消息");msg.value = "变成第二条";
</script>
<template><h1>{{ msg }}</h1>
</template>
<style scoped>
</style>
插值表达式/双大括号语法(Mustache语法)
Vue3的插值操作使用Mustache”语法 (即双大括号)来表示,其中可以包含表达式,例如加法{{ number + 1 }}或者三元不等式{{ ok ? 'Yes' : 'No' }}。插值操作可以用于更新元素的文本值,也就是显示出一个纯文本,等价于{{}},不能用于代码块的赋值。
<h1>{{title}}</h1>
2.使用组件
- 创建组件
单独创建一个.vue结尾的文件,在里面放入组件内容
- 引入组件
import 组件名称 from '组件地址'
例如
<script setup>
import HelloWorld from './components/HelloWorld.vue'
</script>
- 使用组件
<template><div>{{ count }}<button @click="increment" >加1</button><button v-on:click="decrement">减1</button></div><HelloWorld msg="Vite + Vue" />
</template>
3.小练习
练习题:创建一个简单的“计数器”应用
任务:
请用 Vue 实现一个简单的计数器应用。计数器应包含以下功能:
- 显示当前计数值。
- 有两个按钮:
- 一个按钮点击后增加计数值。
- 另一个按钮点击后减少计数值。
- 使用
v-bind
或者:
动态绑定按钮的属性(当计数值大于 0 时,"减"按钮变成可点击状态,计数值为 0 时按钮不可点击)。 - 使用
v-on
或者@
来绑定按钮点击事件。 - 使用 Composition API 和 Option API 完成该功能,要求两种方式都实现一次,便于对比。
提示:
- 使用
ref
和reactive
来管理数据(在 Composition API 中),ref定义的数据在script标签里面需要使用 变量名.value来获取和使用变量。 - 使用
data
和methods
来管理数据和方法(在 Option API 中)。 - 按钮的点击事件可以通过
v-on
进行绑定,例如:@click="increment"
。 - 使用
button
标签和disable
属性来控制按钮的是否能点击
效果如下
Composition API代码实现:
<template>
<div v-bind:class="className">当前的数字:{{ num }}</div>
<button v-on:click="add()">新增</button>
<button v-on:click="sub()" :disabled="num===0">减少</button>
</template>
<script>
export default {
data() {
return {
num: 0,
};
},
methods: {
add() {
this.num++;
},
sub() {
this.num--;
}
}
};
</script>
<style scoped></style>
Composition API代码实现:
<template>
<div>当前的数字:{{ num }}</div>
<button v-on:click="add()">新增</button>
<button v-on:click="sub()">减少</button>
</template>
<script setup>
import { ref } from 'vue'
const num = ref(0)
const add = () =>{
num.value++;
}
const sub = () =>{
if(num.value>0){
num.value--;
}
}
</script>
<style scoped></style>
相关文章:

Vue基本语法
Options API 选项式/配置式api 需要在script中的export default一个对象对象中可以包含data、method、components等keydata是数据,数据必须是一个方法(如果是对象,会导致多组件的时候,数据互相影响,因为对象赋值后&…...
芯片发展史
芯片的发展史可分为几个重要的阶段,从早期的真空管到现代的集成电路,反映了技术进步和创新的历程: 1. 真空管时代 (1904 - 1950年代) 真空管是20世纪初的电子元件,用于放大信号和开关,广泛应用在早期的收音机、电视机…...

我的知识图谱和Neo4j数据库的使用
知识图谱概述 知识图谱的含义 RDF与RDFS RDF(Resource Description Framework,资源描述框架)和RDFS(RDF Schema,RDF模式)是构建知识图谱的基础技术之一。它们提供了一种标准的方式来表示信息,…...

ASP.NET CORE API 解决跨域问题
环境 vs2022 .net 8 创建ASP.net Core API项目 配置跨域 编写ApiController 启动项目 得到服务器运行的 地址 在Hbuiler中创建web项目,编写代码 【运行】-【运行到浏览器】-选择一个浏览器,查看结果 正常显示 问题 如果允许所有源访问,有安全风险方…...
sram测试注意讨论
常规测试首先是mbist测试,原理不用多说,自己看,主要是注意点和考虑点: 1、明确测试用的到func_clk的频率的大小,根据经验值一般大于800M的时钟需要特别考虑Timing的问题:由于pr摆放的位置原因,…...
Mybatis 支持延迟加载的详细内容
延迟加载的概念深入 延迟加载是一种在处理复杂对象关系时非常有用的策略。在企业级应用开发中,数据库中的表之间往往存在着各种关联关系,如一对多(一个用户有多个订单)、多对多(一个学生可以选多门课程,一门…...
word文档使用技巧笔记
中文和数字断开到第二行 word一串数字断开_百度知道 下划线对齐 word下划线怎么固定长度一致-百度经验...

使用docker-compose部署搜索引擎ElasticSearch6.8.10
背景 Elasticsearch 是一个开源的分布式搜索和分析引擎,基于 Apache Lucene 构建。它被广泛用于实时数据搜索、日志分析、全文检索等应用场景。 Elasticsearch 支持高效的全文搜索,并提供了强大的聚合功能,可以处理大规模的数据集并进行快速…...

bugku-web-login2
不知道为啥用bp始终登不上hackbar可以 随便输入个账号密码bp抓包,发现个小tip是base64加密的解密 $sql"SELECT username,password FROM admin WHERE username".$username.""; if (!empty($row) && $row[password]md5($password)){ } …...

【 AI技术赋能有限元分析与材料科学应用实践】Neo-Hookean 材料与深度学习结合的有限元分析
Neo-Hookean 材料模型是用于描述非线性弹性材料(如软组织和橡胶等)的经典模型,特别适用于大变形问题。其基本思想是通过应变能密度函数来描述材料的弹性行为。在该模型中,材料的应力-应变关系不仅依赖于应变能,还通过变…...
StarRocks关于ConcurrentModificationException 问题的解决
背景 本文基于 StarRocks 3.1.7 目前在基于Starrocks做一些数据分析的操作(主要是做一些简单的查询),同事遇到了一些并发的问题: ontent:2024-11-27 07:04:34,048 WARN (starrocks-mysql-nio-pool-214933|3593819) [StmtExecutor.execute():643] execute Exceptio…...

网络安全防护指南:筑牢网络安全防线(5/10)
一、网络安全的基本概念 (一)网络的定义 网络是指由计算机或者其他信息终端及相关设备组成的按照一定的规则和程序对信息收集、存储、传输、交换、处理的系统。在当今数字化时代,网络已经成为人们生活和工作中不可或缺的一部分。它连接了世…...

替代FTP最佳跨网文件传输解决方案——FileLink
在传统的企业文件传输中,FTP(文件传输协议)曾因其便捷性和高效性被广泛应用。然而,其固有的安全漏洞、对大文件传输支持的局限性、易受网络攻击等问题,已逐渐暴露出FTP在现代企业环境下的不足。针对这一问题࿰…...
Cesium在vue2中的引入和注意事项
在Vue2中,可以使用npm包管理工具来安装Cesium,并通过import语句将其引入到项目中。下面是在Vue2中引入Cesium的步骤和注意事项: 步骤: 首先,打开终端并进入Vue项目的根目录。 运行以下命令来安装Cesium: …...

CentOS 9 配置静态IP
文章目录 1_问题原因2_nmcli 配置静态IP3_使用配置文件固定IP4_重启后存在的问题5_nmcli 补充 1_问题原因 CentOS 7 于 2014年6月发布,基于 RHEL 7,并在 2024年6月30日 结束维护。 CentOS 9 作为目前的最新版本,今天闲来闲来无事下载下来后…...
深入解析 Webhook:从原理到实践的全面指南
1. 引言 1.1 什么是 Webhook? Webhook 是一种基于 HTTP 回调的轻量级通信机制,它允许一个系统实时向另一个系统发送数据。当特定事件发生时,Webhook 会主动向指定的 URL 发送 HTTP 请求,通常携带事件相关的数据。这种被动接收通…...

基于springboot+vue实现的创新创业学分管理系统 (源码+L文+ppt)4-111
4 系统总体设计 4.1系统功能结构设计图 根据需求说明设计系统各功能模块。采用模块化设计方法实现一个复杂结构进行简化,分成一个个小的容易解决的板块,然后再将小的板块继续分化成功能单一的更小模块。模块化设计方法使测试调试、维护更容易ÿ…...

如何高效地架构一个Java项目
引言 Java是企业级应用开发的主流语言之一,而我们作为使用Java语言的程序员,职称有初级、中级、高级、资深、经理、架构,但我们往往只是慢慢通过经验的积累迭代了自己的等级,如果没有保持学习的习惯,大多数程序员会停留…...
Scala的模式匹配(8)
package hfdobject Test35_1 { //需求:现在有一个数组Array(1,2,3,4)。我希望能定义三个变量,他们的值分别是数组中的第1,2,3个元素的值 def main(args: Array[String]): Unit {val arr Array(1,2,3,4,5)//第一个元素的值:arr(0…...

nodejs30: CSS 剪辑路径clip-path导致伪元素不可见问题及解决方法
相关问题 应用圆角裁剪时无法显示::after 取消clip-path设置: 完整问题代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, i…...

SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...