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…...

Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...

Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...