《Vue.js前端开发实战》学习笔记 第2章 单文件组件、数据绑定

简介: Vue单文件组件(.vue)由template、script、style三部分构成,支持多根节点与scoped样式。数据绑定通过双大括号语法实现;响应式需用ref()(基础类型)、reactive()(对象/数组)等函数处理,配合setup语法糖可大幅提升开发效率。

一、单文件组件(.vue)核心定义与结构

每个.vue文件对应一个Vue单文件组件,是Vue组件的专属文件格式,由模板、样式、逻辑三部分构成,各部分各司其职且结构固定。

1. 三大组成部分说明

组成部分 对应标签 核心功能 关键注意点
模板 <template> 搭建当前组件的DOM结构,仅作为包裹容器,不会被渲染为真实DOM元素 每个组件最多1个顶层<template>;Vue3支持多根节点,Vue2仅支持单根节点(必须有唯一外层根标签包裹)
样式 <style> 通过CSS代码为当前组件设置样式 可添加scoped属性实现组件样式隔离,避免样式污染
逻辑 <script> 通过JavaScript代码处理组件的数据定义、业务逻辑 Vue3提供setup语法糖,简化数据和方法的定义与暴露

二、数据绑定核心内容

Vue通过数据绑定实现数据与页面分离,最终达成数据驱动视图的效果,核心解决重复编写页面模板的问题(如图书商城复用图书详情页模板,仅修改数据展示不同内容)。
数据绑定分为定义数据输出数据两个核心步骤,且普通数据无响应式,需通过专属函数处理为响应式数据,才能实现数据变化视图同步更新。

1. 初识数据绑定

1.1 定义数据

Vue3提供基础写法setup语法糖写法(推荐),语法糖可大幅简化代码,提高开发效率。

写法1:基础写法(setup函数)
<script>
export default {
    setup() {
        return {
            数据名: 数据值,
            // 可定义多个数据,以键值对形式存在
            ...
        }
    }
}
</script>
  • 核心要点:export default是模块导出语法;setup()是Vue3组合式API的起点,需通过return暴露数据给模板;组件实例创建时执行该代码。
写法2:setup语法糖写法(推荐)
<script setup>
// 直接定义变量即可,无需export和return,自动暴露给模板
const 数据名 = 数据值;
</script>
  • 核心要点:在<script>标签添加setup属性即可使用,代码更简洁,是Vue3开发首选方式。

1.2 输出数据

使用Vue提供的Mustache语法(双大括号语法),在<template>中作为占位符,页面渲染时会被替换为实际数据。

基本语法
<template>
  {
  { 数据名 }}
</template>
支持的表达式类型

Mustache语法可直接解析表达式,返回结果作为输出内容,示例如下:

<template>
  {
  { 'Hello Vue.js' }}       <!-- 字符串表达式 -->
  {
  { number + 1 }}            <!-- 算术运算表达式 -->
  {
  { obj.name }}              <!-- 对象属性取值表达式 -->
  {
  { ok ? 'YES' : 'NO' }}     <!-- 三元运算符表达式 -->
  {
  { '<div>HTML标签</div>' }} <!-- HTML字符串(会被当作纯文本输出,不解析标签) -->
</template>

1.3 基础数据绑定实操示例

步骤1:创建src\components\Message.vue文件,编写代码

<template>{
  { message }}</template>
<script setup>
const message = '不积跬步,无以至千里'
</script>

步骤2:修改src\main.js文件,切换展示组件

import { createApp } from 'vue'
import './style.css'
// 替换为自定义的Message组件
import App from './components/Message.vue'

createApp(App).mount('#app')

页面效果
基础数据绑定页面效果

2. 响应式数据绑定

2.1 普通数据的问题

直接定义的普通数据,修改后数据本身会变化,但页面视图不会同步更新,示例验证如下:
修改src\components\Message.vue

<template>{
  { message }}</template>
<script setup>
let message = '不积跬步,无以至千里'
// 2秒后修改数据
setTimeout(() => {
    console.log("更新前的message:" + message)
    message = '长风破浪会有时, 直挂云帆济沧海'
    console.log('更新后的message:' + message)
}, 2000)
</script>

效果验证
普通数据修改效果

  • 控制台:能打印出更新前、后的数据值,说明数据本身已修改;
  • 页面:始终显示原始数据,说明视图未同步更新。

2.2 响应式数据定义函数

Vue3提供ref()reactive()toRef()toRefs()四个函数,用于将普通数据处理为响应式数据,实现数据变化 → 视图自动同步更新,四个函数适用场景不同,需按需选择。

函数1:ref()
  • 作用:将基本类型数据/引用类型数据转换为响应式数据,是Vue3中最常用的响应式函数;
  • 语法
    // 导入ref函数
    import {
          ref } from 'vue'
    // 定义响应式数据
    const 响应式数据 = ref(初始数据值)
    // 修改响应式数据(必须通过.value属性)
    响应式数据.value = 新值
    
  • 实操示例
    ① 创建src\components\Ref.vue
    <template>{
        { message }}</template>
    <script setup>
    // 导入ref函数
    import { ref } from 'vue'
    // 定义ref响应式数据
    const message = ref('会当凌绝顶,一览众山小')
    // 2秒后修改数据
    setTimeout(() => {
        message.value = '锲而不舍,金石可镂'
    }, 2000)
    </script>
    
    ② 修改src\main.js切换组件
    import App from './components/Ref.vue'
    
    页面效果
    初始效果:ref初始效果
    2秒后效果:ref更新效果
函数2:reactive()
  • 作用:专门创建响应式对象/响应式数组,仅支持引用类型(对象、数组),不支持基本类型;
  • 语法
    // 导入reactive函数
    import {
          reactive } from 'vue'
    // 定义响应式对象/数组
    const 响应式对象 = reactive(普通对象/普通数组)
    // 修改响应式数据(直接修改属性/元素,无需.value)
    响应式对象.属性名 = 新值
    
  • 实操示例
    ① 创建src\components\Reactive.vue
    <template>{
        { obj.message }}</template>
    <script setup>
    // 导入reactive函数
    import { reactive } from 'vue'
    // 定义reactive响应式对象
    const obj = reactive({ message: '不畏浮云遮望眼,自缘身在最高层' })
    // 2秒后修改数据
    setTimeout(() => {
        obj.message = '欲穷千里目,更上一层楼'
    }, 2000)
    </script>
    
    ② 修改src\main.js切换组件
    import App from './components/Reactive.vue'
    
    页面效果
    初始效果:reactive初始效果
    2秒后效果:reactive更新效果
函数3:toRef()
  • 作用:将响应式对象中的单个属性转换为独立的响应式数据,修改该数据会同步更新原响应式对象;
  • 语法
    // 导入reactive、toRef函数
    import {
          reactive, toRef } from 'vue'
    // 先定义基础响应式对象
    const 响应式对象 = reactive({
          属性1:1, 属性2:2 })
    // 将单个属性转为响应式数据
    const 响应式属性 = toRef(响应式对象, '属性名')
    // 修改数据(需通过.value)
    响应式属性.value = 新值
    
  • 实操示例
    ① 创建src\components\ToRef.vue
    <template>
        <div>message的值:{
        { message }}</div>
        <div>obj.message的值:{
        { obj.message }}</div>
    </template>
    <script setup>
    // 导入所需函数
    import { reactive, toRef } from 'vue'
    // 定义基础响应式对象
    const obj = reactive({ message: '黑发不知勤学早,白首方悔读书迟' })
    // 将obj的message属性转为独立响应式数据
    const message = toRef(obj, 'message')
    // 2秒后修改数据
    setTimeout(() => {
        message.value = '少壮不努力,老大徒伤悲'
    }, 2000)
    </script>
    
    ② 修改src\main.js切换组件
    import App from './components/ToRef.vue'
    
    页面效果
    初始效果:toRef初始效果
    2秒后效果:toRef更新效果
函数4:toRefs()
  • 作用:将响应式对象中的所有属性一次性转换为独立的响应式数据,返回一个包含所有响应式属性的对象,可通过解构赋值快速使用,修改属性会同步更新原响应式对象;
  • 语法
    // 导入reactive、toRefs函数
    import {
          reactive, toRefs } from 'vue'
    // 先定义基础响应式对象
    const 响应式对象 = reactive({
          属性1:1, 属性2:2 })
    // 将所有属性转为响应式数据,解构赋值获取
    const {
          属性1, 属性2 } = toRefs(响应式对象)
    // 修改数据(需通过.value)
    属性1.value = 新值
    
  • 实操示例
    ① 创建src\components\ToRefs.vue
    <template>
        <div>message的值:{
        { message }}</div>
        <div>obj.message的值:{
        { obj.message }}</div>
    </template>
    <script setup>
    // 导入所需函数
    import { reactive, toRefs } from 'vue'
    // 定义基础响应式对象
    const obj = reactive({ message: '盛年不重来,一日难再晨' })
    // 将obj的所有属性转为响应式数据,解构获取message
    let { message } = toRefs(obj)
    // 2秒后修改数据
    setTimeout(() => {
        message.value = '及时当勉励,岁月不待人'
    }, 2000)
    </script>
    
    ② 修改src\main.js切换组件
    import App from './components/ToRefs.vue'
    
    页面效果
    初始效果:toRefs初始效果
    2秒后效果:toRefs更新效果

三、核心知识点总结

1. 单文件组件关键

  1. Vue3 对<template>的根节点限制放宽,支持多根节点,解决Vue2外层根标签的冗余问题;
  2. <script setup>是Vue3推荐写法,无需export defaultreturn,直接定义数据/方法即可暴露给模板;
  3. <style scoped>是组件样式隔离的核心方式,开发中建议默认添加。

2. 数据绑定关键

  1. 基础数据绑定通过定义数据(setup)+ 输出数据(双大括号)实现,仅能完成数据的初始展示;
  2. Mustache语法支持各类简单表达式,但会将HTML字符串解析为纯文本,无法渲染DOM。

3. 响应式数据核心

  1. 响应式是Vue数据驱动视图的核心底层,普通数据需通过Vue3专属函数处理后才具备响应式;
  2. ref()是通用响应式函数,支持所有数据类型,修改时必须加.value(模板中使用无需加);
  3. reactive()仅支持对象/数组,修改时直接操作属性/元素,无需.value
  4. toRef()toRefs()基于已有响应式对象创建,用于拆分对象属性,实现属性的独立响应式,修改后会同步更新原对象;
  5. 所有响应式函数使用前必须先从vue中导入,否则会报错。

4. 开发实操注意

  1. 切换组件的核心方式是修改src\main.jsimport App from 'xxx'的导入路径;
  2. 定时器是验证响应式的常用方式,可直观看到数据和视图的更新效果;
  3. 开发中优先使用setup语法糖,简化代码编写;优先使用ref()定义响应式数据,通用性更强。
相关文章
|
2天前
|
人工智能 自然语言处理 Shell
🦞 如何在 Moltbot 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
🦞 如何在 Moltbot 配置阿里云百炼 API
|
6天前
|
人工智能 API 开发者
Claude Code 国内保姆级使用指南:实测 GLM-4.7 与 Claude Opus 4.5 全方案解
Claude Code是Anthropic推出的编程AI代理工具。2026年国内开发者可通过配置`ANTHROPIC_BASE_URL`实现本地化接入:①极速平替——用Qwen Code v0.5.0或GLM-4.7,毫秒响应,适合日常编码;②满血原版——经灵芽API中转调用Claude Opus 4.5,胜任复杂架构与深度推理。
|
10天前
|
JSON API 数据格式
OpenCode入门使用教程
本教程介绍如何通过安装OpenCode并配置Canopy Wave API来使用开源模型。首先全局安装OpenCode,然后设置API密钥并创建配置文件,最后在控制台中连接模型并开始交互。
4655 8
|
16天前
|
人工智能 JavaScript Linux
【Claude Code 全攻略】终端AI编程助手从入门到进阶(2026最新版)
Claude Code是Anthropic推出的终端原生AI编程助手,支持40+语言、200k超长上下文,无需切换IDE即可实现代码生成、调试、项目导航与自动化任务。本文详解其安装配置、四大核心功能及进阶技巧,助你全面提升开发效率,搭配GitHub Copilot使用更佳。
10466 22
|
3天前
|
人工智能 自然语言处理 Cloud Native
大模型应用落地实战:从Clawdbot到实在Agent,如何构建企业级自动化闭环?
2026年初,开源AI Agent Clawdbot爆火,以“自由意志”打破被动交互,寄生社交软件主动服务。它解决“听与说”,却缺“手与脚”:硅谷Manus走API原生路线,云端自主执行;中国实在Agent则用屏幕语义理解,在封闭系统中精准操作。三者协同,正构建AI真正干活的三位一体生态。
2380 9
|
1天前
|
存储 安全 数据库
使用 Docker 部署 Clawdbot(官方推荐方式)
Clawdbot 是一款开源、本地运行的个人AI助手,支持 WhatsApp、Telegram、Slack 等十余种通信渠道,兼容 macOS/iOS/Android,可渲染实时 Canvas 界面。本文提供基于 Docker Compose 的生产级部署指南,涵盖安全配置、持久化、备份、监控等关键运维实践(官方无预构建镜像,需源码本地构建)。
1360 3
|
1天前
|
机器人 API 数据安全/隐私保护
只需3步,无影云电脑一键部署Moltbot(Clawdbot)
本指南详解Moltbot(Clawdbot)部署全流程:一、购买无影云电脑Moltbot专属套餐(含2000核时);二、下载客户端并配置百炼API Key、钉钉APP KEY及QQ通道;三、验证钉钉/群聊交互。支持多端,7×24运行可关闭休眠。
2224 2
|
18天前
|
存储 人工智能 自然语言处理
OpenSpec技术规范+实例应用
OpenSpec 是面向 AI 智能体的轻量级规范驱动开发框架,通过“提案-审查-实施-归档”工作流,解决 AI 编程中的需求偏移与不可预测性问题。它以机器可读的规范为“单一真相源”,将模糊提示转化为可落地的工程实践,助力开发者高效构建稳定、可审计的生产级系统,实现从“凭感觉聊天”到“按规范开发”的跃迁。
2630 18
|
10天前
|
人工智能 前端开发 Docker
Huobao Drama 开源短剧生成平台:从剧本到视频
Huobao Drama 是一个基于 Go + Vue3 的开源 AI 短剧自动化生成平台,支持剧本解析、角色与分镜生成、图生视频及剪辑合成,覆盖短剧生产全链路。内置角色管理、分镜设计、视频合成、任务追踪等功能,支持本地部署与多模型接入(如 OpenAI、Ollama、火山等),搭配 FFmpeg 实现高效视频处理,适用于短剧工作流验证与自建 AI 创作后台。
1416 6