Vue入门到精通:核心语法—模板语法

在这里插入图片描述

Vue入门到精通:核心语法—模板语法

Vue.js因其简单、易用和高效的特点,自推出以来一直受到广泛关注。Vue.js的核心概念和技术包括模板语法、计算属性、事件监听、动态样式绑定、条件渲染指令(如v-if)、列表渲染指令(如v-for)、事件处理机制、表单数据收集方法、Vue实例的生命周期管理以及过渡效果与动画实现等。这些内容构成了日常开发中不可或缺的基础知识体系。

目前Vue提供了两种主要的编程模式:选项式API (Options API) 和组合式API (Composition API)。这里主要基于选项式API进行学习,但也会适当提及组合式API的相关特性。

一、模板语法

随着前端技术的不断演进,用户界面的交互复杂度日益增加,这直接导致了对字符拼接、循环遍历以及DOM节点操作等技术需求的激增。特别是在处理大量数据和频繁的用户交互时,如何优化用户体验和提升性能成为了一个亟待解决的问题。Vue.js 引入了一种基于HTML的模板语法,它允许开发者以声明式的方式将应用或组件实例的数据绑定到DOM上,从而简化了开发过程并提高了代码的可维护性。

在Vue的模板中,除了标准的HTML结构外,还融入了两种特有的语法:插值(Interpolation)和指令(Directives)。插值语法的主要功能是向HTML标签体中动态插入数据值,使得数据的展示更加直观和灵活。而指令语法则用于操作其所在的HTML标签,例如设置动态属性值、绑定事件监听器、控制元素的显示与隐藏等。这些特性极大地增强了模板的表达能力和灵活性。

在底层实现上,Vue会将模板编译成高度优化的JavaScript代码。这一过程涉及到虚拟DOM的创建和差异比较算法的应用,确保只有在实际需要更新的部分才会被重新渲染,从而最小化了性能开销。结合Vue的响应式系统,当应用的状态数据发生变化时,Vue能够智能地识别哪些DOM节点需要更新,并执行相应的更新操作。这种机制不仅提升了应用的性能,也使得开发者能够专注于业务逻辑的实现,而无需过多关注性能优化的细节。

1.插值语法

在Vue.js中,插值语法是一种强大的工具,它允许开发者将动态数据直接嵌入到HTML模板中。这种语法的核心在于其简洁而直观的表达方式,使得数据的展示变得既灵活又高效。

插值语法的结构非常简单,它通过双大括号{{ }}来包裹一个JavaScript表达式,从而实现数据的动态绑定。例如,{{ message }} 表示将data对象中的message属性的值插入到这个位置。这种方式不仅仅限于常量和变量,还可以是更复杂的表达式,如变量对象的方法调用或三目运算符等。

值得注意的是,插值语法的使用有一定的限制。它只能用于标签体的内部文本或作为标签体的一部分,而不能直接用作HTML标签的属性值。这意味着,如果想要将数据绑定到元素的属性上,需要使用Vue的指令语法(v-bind)来实现。

此外,插值语法中引用的数据来源于Vue实例的data对象。下面是一个简单的Vue使用实例以及运行效果。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>插值表达式</title>
  </head>
  <body>
    <div id="app">
      <p>{{123}}</p>
      <p>{{message}}</p>
      <p>{{message.toUpperCase()}}</p>
      <p>
        {{score<60 ? '考试未及格' : '考试及格'}}
      </p>
    </div>

    <script src="https://cdn.bootcdn.net/ajax/libs/vue/3.2.47/vue.global.js"></script>
    <script>
      const { createApp } = Vue

      createApp({
        data() {
          return {
            message: 'Welcome to learning Vue!',
            score: 59,
          }
        },
      }).mount('#app')
    </script>
  </body>
</html>

运行结果:

在这里插入图片描述

2.指令语法

在Vue.js中,指令是一种特殊的标签属性,它们以“v-”作为前缀,用于扩展HTML元素的功能。这些自定义属性的值通常是一个JavaScript表达式,允许开发者动态地控制DOM元素的行为和外观。Vue框架内置了一系列功能强大的指令,每个指令都设计用来执行特定的任务,从而简化开发过程并增强用户体验。

例如,v-bind指令用于绑定HTML属性值到Vue实例的数据,使得数据变化时能够实时反映到视图上。通过这个指令,开发者可以轻松实现动态的样式设置或属性赋值,而无需手动更新DOM。另一个常用的指令是v-on,它允许为元素添加事件监听器,以便在用户交互时触发特定的方法或函数,这对于处理表单输入、按钮点击等行为非常有用。

此外,v-ifv-show指令则提供了条件渲染的能力。v-if会根据表达式的真假来完全移除或添加DOM元素,适用于那些需要根据条件显示或隐藏整个元素的场景;而v-show则是通过CSS的display属性来控制元素的可见性,适合仅改变元素显示状态的情况。这两种指令虽然都可以控制元素的显示与隐藏,但它们的底层实现机制不同,因此在性能和应用场景上也有所区别。

无论是哪种类型的指令,其操作的目标始终是包含该指令的HTML标签本身。这意味着指令的作用范围仅限于它们所在的元素,不会对其他部分产生影响。这种设计既保持了代码的清晰性,也提高了可维护性,因为每个指令的职责都非常明确。

下面以v-bind与v-on为例来演示指令语法的使用以及其运行效果展示。

语法:

● v-bind:属性名=“JavaScript表达式”。

● v-on:事件名=“方法名表达式”。

代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>指令语法</title>
  </head>
  <body>
    <div id="app">
      <a v-bind:href="url">去学习Vue技术</a>
      <br />
      <button v-on:click="confirm">确认</button>
    </div>

    <script src="https://cdn.bootcdn.net/ajax/libs/vue/3.2.47/vue.global.min.js"></script>
    <script>
      const { createApp } = Vue

      createApp({
        data() {
          return {
            url: 'https://www.runoob.com/',
          }
        },

        // methods中配置的方法,模板中可以直接调用
        methods: {
          confirm() {
            if (window.confirm('是否进入学习?')) {
              window.location.href = 'https://www.runoob.com/'
            }
          },
        },
      }).mount('#app')
    </script>
  </body>
</html>

代码解析:

(1)HTML结构

  • <!DOCTYPE html>:声明文档类型为HTML5。
  • <html lang="en">:设置文档的语言为英语。
  • <head>:包含文档的元数据,如字符编码、兼容性设置和视口配置。
  • <title>:设置网页标题为“指令语法”。
  • <body>:包含网页的主体内容。

(2)Vue.js部分

  • <div id="app">:这是Vue应用的挂载点。
  • <a v-bind:href="url">去学习Vue技术</a>:使用v-bind指令将url数据属性的值绑定到href属性上。当url的值改变时,链接也会相应更新。
  • <button v-on:click="confirm">确认</button>:使用v-on指令监听按钮的点击事件,并在点击时调用confirm方法。

(3)JavaScript部分

  • <script src="https://unpkg.com/vue@next"></script>:引入Vue.js库。
  • createApp({ ... }):创建一个Vue应用实例。
  • data():返回一个对象,其中包含应用的数据属性。在这个例子中,只有一个url属性。
  • methods:定义应用的方法。在这个例子中,有一个confirm方法,用于处理按钮点击事件。
  • mount('#app'):将Vue应用挂载到id为app的元素上。

弹窗中“确定”按钮后跳转至指定网站。其实Vue允许将“v-bind:属性名”简化为“:属性名”,“v-on:事件名”简化为“@事件名”的形式。

下面是运行效果:

在这里插入图片描述

3.data和methods配置项

在创建Vue应用对象时,需要提供一个配置对象,其中包含两个核心配置项:datamethods。接下来,我们将详细探讨这两个配置项的功能和用法。

data配置项。它的值必须是一个函数,该函数返回一个对象,这个对象包含了若干个可变的属性,通常被称为data对象。这些属性在模板中可以被动态地读取和显示。通过这种方式,开发者可以轻松地将数据与视图进行绑定,实现数据的双向绑定。

methods配置项。它是一个包含多个方法的对象。在这些方法中,可以通过this.xxx来访问或修改data对象中的属性。当这些属性被修改后,页面会自动更新,以反映最新的数据状态。

data函数和methods方法中的this关键字,本质上是一个代理(Proxy)对象。这个代理对象负责代理data对象中所有属性的读写操作。因此,用户可以通过this来读取或更新data对象中的属性。同样地,在methods对象中定义的所有方法也会被添加到这个代理对象中,使得在方法中也可以通过this来更新data属性,从而触发页面的自动更新。

关于模板中的表达式读取变量或函数,这些操作本质上都是从代理对象上进行的查找。

下面通过一段代码对data函数和methods对象进行具体演示。

代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>data属性与methods方法</title>
  </head>
  <body>
    <div id="app">
      <h2>count: {{count}}</h2>
      <button @click="updateCount">更新</button>
    </div>

    <script src="https://cdn.bootcdn.net/ajax/libs/vue/3.2.47/vue.global.min.js"></script>
    <script>
      const { createApp } = Vue

      const app = createApp({
        // data函数返回data对象, data对象中的所有属性在代理对象上都会有对应的名称的属性
        data() {
          console.log(this)
          return {
            count: 0,
          }
        },

        // methods中的所有方法,都会成为代理对象的方法
        methods: {
          updateCount() {
            this.count += 1
          },
        },
      })
      // console.log(app)

      const vm = app.mount('#app')
      // 通过代理对象vm读取定义在data对象中的count属性
      console.log(vm.count)

      // 2秒后通过代理对象vm直接更新data中的count属性,界面会自动更新
      setTimeout(() => {
        vm.count += 2
      }, 2000)

      // 4秒后通过代理对象vm调用methods中定义的方法来更新count,界面会自动更新
      setTimeout(() => {
        vm.updateCount()
      }, 4000)
    </script>
  </body>
</html>

运行结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/937369.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++中如何实现接口继承与实现继承,以及它们的区别?

概念 在 C 中&#xff0c;接口继承和实现继承是两种不同的继承方式&#xff0c;它们在设计模式、代码复用和多态性方面有着不同的应用。下面将分别解释这两者的概念、实现方式及其区别。 接口继承 接口继承指的是只继承类的接口&#xff08;即公共的成员函数声明&#xff09…

WPF+MVVM案例实战与特效(三十八)- 封装一个自定义的数字滚动显示控件

文章目录 1、运行效果2、案例实现1、功能设计2、页面布局3、控件使用4、运行效果3、拓展:多数字自定义控件1、控件应用4、总结1、运行效果 在Windows Presentation Foundation (WPF)应用程序中,自定义控件允许开发者创建具有特定功能和外观的独特UI元素。本博客将介绍一个名…

2024年12月HarmonyOS应用开发者高级认证全新题库

注意事项&#xff1a;切记在考试之外的设备上打开题库进行搜索&#xff0c;防止切屏三次考试自动结束&#xff0c;题目是乱序&#xff0c;每次考试&#xff0c;选项的顺序都不同&#xff0c;作者已于2024年12月15日又更新了一波题库&#xff0c;题库正确率99%&#xff01; 新版…

【Java学习笔记】JUnit

一、为什么需要 JUnit 二、基本介绍 三、实现方法 第一次添加&#xff1a; 在需要测试的方法处输入 Test注解&#xff0c;快捷键AltInsert选择添加版本&#xff08;常用JUnit5.4&#xff09; 出现绿色箭头可进行测试和编译

MySQL误删除 binlog 还原 恢复已删除数据 实战 超详细

硬盘有价&#xff0c;数据无价&#xff0c;数据库执行&#xff0c;谨慎操作&#xff01; binlog日志还原不适用于直接删表删库的误操作&#xff01; 目录 实战恢复 1、导出相关时间binlog数据 2、找到对应语句以及pos区间 3、导出改动区间的sql 4、将binlog导出的sql转换…

百度地图JavaScript API核心功能指引

百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口&#xff0c;它能够帮助您在网站中构建功能丰富、交互性强的地图应用&#xff0c;包含了构建地图基本功能的各种接口&#xff0c;提供了诸如本地搜索、路线规划等数据服务。百度地图JavaScript API支持HTTP和HT…

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(五)

《拉依达的嵌入式\驱动面试宝典》—C/CPP基础篇(五) 你好,我是拉依达。 感谢所有阅读关注我的同学支持,目前博客累计阅读 27w,关注1.5w人。其中博客《最全Linux驱动开发全流程详细解析(持续更新)-CSDN博客》已经是 Linux驱动 相关内容搜索的推荐首位,感谢大家支持。 《拉…

C语言简单日志宏

最近调试C代码&#xff0c;发现要写很多打印的内容不是很方便&#xff0c;于是简单写一下C语言的日志来方便自己调试&#xff1a; 1. 简单打印带标识的日志信息 #include "stdio.h" #define PRINT(...) \do \{ …

【算法】—— 前缀和

一、区间求和问题 给定一个长度为n的序列a&#xff0c;有m次查询&#xff0c;每次查询输出一个连续区间的和。 使用暴力做法求解是将每次查询都遍历该区间求和 //暴力做法import java.util.Scanner;public class Test {public static void main(String[] args){Scanner scan…

详解下c语言下的多维数组和指针数组

在实际c语言编程中&#xff0c;三维及以上数组我们使用的很少&#xff0c;二维数组我们使用得较多。说到数组&#xff0c;又不得关联到指针&#xff0c;因为他们两者的联系太紧密了。今天我们就详细介绍下c语言下的多维数组(主要是介绍二维数组)和指针。 一、二维数组 1.1&am…

【实验】【H3CNE邓方鸣】交换机端口安全实验+2024.12.11

实验来源&#xff1a;邓方鸣交换机端口安全实验 软件下载&#xff1a; 华三虚拟实验室: 华三虚拟实验室下载 wireshark&#xff1a;wireshark SecureCRT v8.7 版本: CRT下载分享与破解 文章目录 dot1x 开启802.1X身份验证 开启802.1X身份验证&#xff0c;需要在系统视图和接口视…

leetcode-73.矩阵置零-day5

class Solution {public void setZeroes(int[][] mat) {int m mat.length, n mat[0].length;// 1. 扫描「首行」和「首列」记录「首行」和「首列」是否该被置零boolean r0 false, c0 false;for (int i 0; i < m; i) {if (mat[i][0] 0) {r0 true;break;}}for (int j …

C++ webrtc开发(非原生开发,linux上使用libdatachannel库)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、libdatachannel库的下载和build二、开始使用 1.2.引入库3.开始使用 总结 前言 使用c开发webrtc在互联网上留下的资料甚少&#xff0c;经过我一段时间的探…

windows11 专业版 docker desktop 安装指南

家庭中文版需升级专业版&#xff0c;家庭版没有hyper-v。 开始运行optionalfeatures.exe打开windows功能 安装wsl2 步骤 1 - 启用适用于 Linux 的 Windows 子系统步骤 2 - 检查运行 WSL 2 的要求步骤 3 - 启用虚拟机功能步骤 4 - 下载 Linux 内核更新包 步骤 1 - 启用适用于 L…

解锁前端开发速度的秘密武器【Vite】

在前端开发的江湖中&#xff0c;有人偏爱 Webpack 的强大与稳定&#xff0c;有人钟情于 Rollup 的轻量与高效。而 Vite&#xff0c;这个后来居上的工具&#xff0c;却以“极致的快”和“极简的易”赢得了开发者的芳心。众所周知万事都有缘由&#xff0c;接下来我们就来深度剖析…

AI发展与LabVIEW程序员就业

人工智能&#xff08;AI&#xff09;技术的快速发展确实对许多行业带来了变革&#xff0c;包括自动化、数据分析、软件开发等领域。对于LabVIEW程序员来说&#xff0c;AI的崛起确实引发了一个值得关注的问题&#xff1a;AI会不会取代他们的工作&#xff0c;导致大量失业&#x…

决策曲线分析(DCA)中平均净收益用于评价模型算法(R自定义函数)

决策曲线分析&#xff08;DCA&#xff09;中平均净收益用于评价模型算法 DCA分析虽然不强调用来评价模型算法或者变量组合的优劣&#xff0c;但是实际应用过程中感觉DCA曲线的走势和模型的效能具有良好的一致性&#xff0c;其实这种一致性也可以找到内在的联系&#xff0c;比如…

【Linux】:多线程(POSIX 信号量 、基于环形队列的生产消费者模型)

&#x1f4c3;个人主页&#xff1a;island1314 ​​ &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f49e; &#x1f49e; &#x1f49e; 目录 1. POSIX 信号量…

人工智能的历史概况和脉络

人工智能( AI ) 的历史始于古代&#xff0c;当时有神话、故事和谣言称&#xff0c;人工生物被工匠大师赋予了智慧或意识。从古代到现在&#xff0c;对逻辑和形式推理的研究直接导致了20 世纪 40 年代可编程数字计算机的发明&#xff0c;这是一种基于抽象数学推理的机器。这种设…

昇思25天学习打卡营第33天|共赴算力时代

文章目录 一、平台简介二、深度学习模型2.1 处理数据集2.2 模型训练2.3 加载模型 三、共赴算力时代 一、平台简介 昇思大模型平台&#xff0c;就像是AI学习者和开发者的超级基地&#xff0c;这里不仅提供丰富的项目、模型和大模型体验&#xff0c;还有一大堆经典数据集任你挑。…