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

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

插值表达式管不了 HTML 属性。想让 srchrefclass 也跟着数据变,就得用 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 响应式基础。

相关推荐
SatanII2 小时前
OpenStack核心组件详解|Keystone+Glance+Nova+Cinder原理与实操笔记
网络·笔记·openstack
AIGC小尼2 小时前
穿山甲 + 腾讯短剧短视频聚合广告平台|Android+SpringBoot+Vue+Docker 完整部署指南
android·vue.js·spring boot·聚合广告·广告平台·穿山甲广告·腾讯广告
JeffongTan10 小时前
在LWC中镶嵌VF Page获取用户IP
前端·javascript·salesforce
点心的游戏开发世界11 小时前
GDScript 入门笔记(十一):Lambda 与匿名函数
开发语言·笔记·游戏引擎·godot
摇滚侠11 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 使用 JdbcTemplate 阅读笔记 32
spring boot·笔记·后端
不cong明的亚子12 小时前
web live多屏互动平台
javascript·经验分享·音视频
鱼子星_13 小时前
【C++】继承和多态(上)
c++·笔记
xian_wwq13 小时前
【学习笔记】深度认知系列-第14讲 端侧AI崛起——为什么AI正在从云端走向本地
人工智能·笔记·学习
dsyyyyy110114 小时前
JS复习,难点,易错点总结
开发语言·javascript·ecmascript