Vue3 零基础每日笔记(004):模板语法初识——插值表达式、v-bind、v-on 一次学会

一、前言

前三篇环境、工具、构建全部就位,今天正式写"Vue 的代码"------模板语法。这是 Vue 的门面担当:插值表达式 {{ }}、属性绑定 v-bind、事件绑定 v-on。学完今天,页面就能"动"起来了。

二、插值表达式 {{ }}:把数据放到页面上

双大括号语法,是 Vue 最基础的输出方式,作用:把 script 里的数据渲染到模板中。

vue 复制代码
<template>
  <!-- 1. 基础用法:渲染变量 -->
  <p>姓名:{{ name }}</p>

  <!-- 2. 大括号里可以写简单的 JS 表达式 -->
  <p>年龄:{{ age + 1 }}</p>
  <p>大写名字:{{ name.toUpperCase() }}</p>
  <p>是否成年:{{ age >= 18 ? '是' : '否' }}</p>

  <!-- 3. 错误示范:大括号里只能写表达式,不能写语句 -->
  <!-- <p>{{ if (age > 18) { return '成年' } }}</p> -->
</template>

<script setup>
import { ref } from 'vue'

const name = ref('小明')
const age = ref(17)
</script>

三个必须记住的规则:

  1. 大括号里放表达式 (有返回值),不能放 if、for 这类语句
  2. 属性值里的 {``{ }} 无效,属性要用下面的 v-bind
  3. ref 定义的数据在模板里直接写名字,不用 .value(下一篇细讲为什么)

三、v-bind:给属性动态绑定数据

插值表达式管不了 HTML 属性。想让 src、href、class 也跟着数据变,就得用 v-bind:

vue 复制代码
<template>
  <!-- 完整写法 -->
  <a v-bind:href="url">去 Vue 官网</a>

  <!-- 语法糖:冒号缩写,实际项目 99% 都这么写 -->
  <img :src="imgUrl" :alt="title" />

  <!-- 绑定的值可以是表达式拼接 -->
  <img :src="'https://cdn.xxx.com/' + imgName" />
</template>

<script setup>
import { ref } from 'vue'

const url = ref('https://cn.vuejs.org')
const imgUrl = ref('/logo.png')
const title = ref('网站logo')
const imgName = ref('banner.jpg')
</script>

记忆口诀:大括号管内容,冒号管属性。

试一下它的"动态"威力------点按钮换图片:

vue 复制代码
<template>
  <img :src="src" width="300" />
  <button @click="src = '/img2.png'">换图</button>
</template>

<script setup>
import { ref } from 'vue'
const src = ref('/img1.png')
</script>

数据一变,属性立刻跟着变------这就是数据驱动视图,Vue 的核心思想。

四、v-on:绑定事件

用户点击、输入、鼠标移动时执行代码,用 v-on 监听事件:

vue 复制代码
<template>
  <!-- 完整写法 -->
  <button v-on:click="count++">完整写法:点我 {{ count }}</button>

  <!-- 语法糖 @:实际项目 99% 都这么写 -->
  <button @click="count++">语法糖:点我 {{ count }}</button>

  <!-- 事件处理逻辑复杂时,封装成函数 -->
  <button @click="add">加 10</button>
</template>

<script setup>
import { ref } from 'vue'

const count = ref(0)

function add() {
  count.value += 10
}
</script>

两个关键区别:

  • @click="count++":直接写表达式,一行搞定
  • @click="add":逻辑复杂就写函数名,注意函数名不加括号,加了括号是"立刻执行",不加是"点击时才执行"(新手高频坑,第七节详解)

常用事件速查:@click 点击、@input 输入、@change 值变化、@keyup 按键抬起、@mouseenter 鼠标移入。

五、综合实战:一个迷你计数器

三个语法合体,写个完整可跑的小案例:

vue 复制代码
<template>
  <h1>{{ title }}</h1>
  <p :style="{ color: count > 0 ? 'green' : 'red' }">
    当前计数:{{ count }}
  </p>
  <button @click="count++">+1</button>
  <button @click="reset">归零</button>
</template>

<script setup>
import { ref } from 'vue'

const title = ref('我的第一个交互页面')
const count = ref(0)

function reset() {
  count.value = 0
}
</script>

运行后:点 +1 数字变绿,归零后数字变红。v-bind 负责颜色、{``{ }} 负责数字、v-on 负责响应点击------三兄弟各司其职。

【截图位置:点击按钮后计数变绿、归零变红的运行效果】

六、今日小结

  • {``{ }} 渲染数据,只能写表达式不能写语句
  • v-bind(缩写 :)绑定属性;v-on(缩写 @)绑定事件
  • 数据变 → 视图自动变,这就是数据驱动
  • @click="fn" 传函数名不加括号

作者:陈志宝

下篇预告

ref 到底是什么?为什么 script 里要 .value、模板里又不用?下一篇讲透 Vue3 响应式的第一块基石:ref 响应式基础。

相关推荐
白杨尚青25 分钟前
C++入门篇(十):string(上)——认识string:构造与三大遍历(一条龙讲透operator[]、迭代器、auto、范围for)
java·开发语言·c++·笔记·stl
可乐鸡翅yeah_30 分钟前
hls.js 切换多个视频源,新手开发常见踩坑
开发语言·前端·javascript·ios·ffmpeg·音视频·safari
Chen—LSN34 分钟前
C语言——⽂件操作(1)
c语言·开发语言·c++·经验分享·笔记·算法·链表
kyriewen37 分钟前
我实测了前端日期的 5 个坑:差 8 小时只是开始
前端·javascript·程序员
anew___38 分钟前
《从零手写操作系统 (11):文件系统初探——initrd与VFS抽象层》
java·javascript·算法
今年下半年1 小时前
【VUE3】移动端:使用腾讯地图显示区域统计与放大显示资产点位
javascript·前端框架·vue·地图
Chen—LSN1 小时前
C语言——文件操作(2)
c语言·开发语言·c++·经验分享·笔记·算法·c#
a努力。1 小时前
LangChain Agent消息链路全解析
java·前端·javascript
今年下半年1 小时前
【前端】ant-design-vue 表格「行、列都动态」的处理方案
前端·javascript·vue.js
Lintongzg2 小时前
千卡训练的隐形账单:通信不是瓶颈
笔记·学习·性能优化·llm