Vue.js 模板语法详解:插值表达式与指令使用指南

news2024/11/14 4:05:20

Vue.js 模板语法详解:插值表达式与指令使用指南

在这里插入图片描述

引言

简要介绍主题
Vue.js 是一个现代化的 JavaScript 框架,用于构建用户界面。Vue 的模板语法提供了直观且功能强大的工具,用于将数据与 DOM 绑定。本文将深入探讨 Vue.js 的两个核心知识点:插值表达式和指令,帮助读者掌握 Vue 的模板语法。

目标和预期收获
读者将学习如何使用 Vue.js 的插值表达式和各种指令来动态地控制和渲染 DOM 元素。通过对 Vue 2 和 Vue 3 的比较,读者能够了解各版本的差异,并应用这些知识于实际项目中。

文章目录

    • Vue.js 模板语法详解:插值表达式与指令使用指南
      • 引言
      • 主要内容
        • 1. 插值表达式
        • 2. 指令
      • 深入探讨
      • 实际应用
        • 案例研究:构建一个简单的用户界面
      • 总结
      • 参考资料

主要内容

1. 插值表达式

什么是插值表达式
插值表达式是 Vue.js 模板语法的基础,它允许开发者在模板中嵌入 JavaScript 表达式,动态地显示数据。

基本用法
插值表达式使用双大括号 {{ }} 包裹变量或表达式,将其插入到 HTML 中。

代码示例(Vue 2 和 Vue 3):

<div id="app">
  <p>{{ message }}</p>
  <p>{{ number + 1 }}</p>
</div>

<script>
export default {
  name: 'app',
  data: {
    message: 'Hello, Vue.js!',
    number: 42
  }
};
</script>
<template>
  <div>
    <p>{{ message }}</p>
    <p>{{ number + 1 }}</p>
  </div>
</template>

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

const message = ref('Hello, Vue.js!');
const number = ref(42);
</script>

解释
在这个例子中,{{ message }}{{ number + 1 }}messagenumber 的值插入到 HTML 中。当这些数据发生变化时,页面上的内容也会自动更新。

复杂表达式
插值表达式也可以用于更复杂的计算和方法调用。例如,调用一个方法来格式化日期:

代码示例(Vue 2 和 Vue 3):

<div id="app">
  <p>{{ formatDate(date) }}</p>
</div>

<script>
export default {
  name: 'app',
  data: {
    date: new Date()
  },
  methods: {
    formatDate(date) {
      return date.toLocaleDateString();
    }
  }
};
</script>
<template>
  <div>
    <p>{{ formatDate(date) }}</p>
  </div>
</template>

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

const date = ref(new Date());

function formatDate(date) {
  return date.toLocaleDateString();
}
</script>

解释
通过在插值表达式中调用 formatDate 方法,我们可以将日期格式化为本地日期字符串。这种方式使得模板更加动态和灵活。

2. 指令

Vue.js 指令是 Vue 模板语法的核心部分,提供了丰富的功能来控制 DOM 的行为。以下是 Vue.js 常用的指令,包括 Vue 2 和 Vue 3 的使用方法及其区别:

v-bind:绑定属性
v-model:双向数据绑定
v-if、v-else-if、v-else:条件渲染
v-for:循环渲染
v-on:事件处理
v-show:显示/隐藏
v-pre:跳过这个元素和它的子元素的编译
v-cloak:保留元素直到 Vue 实例准备好
v-once:仅渲染元素一次

v-bind

代码示例(Vue 2 和 Vue 3):

<div id="app">
  <img v-bind:src="imageSrc" alt="Vue Logo">
</div>

<script>
export default {
  name: 'app',
  data: {
    imageSrc: 'https://vuejs.org/images/logo.png'
  }
};
</script>
<template>
  <div>
    <img :src="imageSrc" alt="Vue Logo">
  </div>
</template>

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

const imageSrc = ref('https://vuejs.org/images/logo.png');
</script>

解释
v-bind 指令用于绑定 HTML 属性。在 Vue 3 中,简写为 :

v-model

代码示例(Vue 2 和 Vue 3):

<div id="app">
  <input v-model="message" placeholder="Type something">
  <p>Message: {{ message }}</p>
</div>

<script>
export default {
  name: 'app',
  data: {
    message: ''
  }
};
</script>
<template>
  <div>
    <input v-model="message" placeholder="Type something">
    <p>Message: {{ message }}</p>
  </div>
</template>

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

const message = ref('');
</script>

解释
v-model 实现双向数据绑定。Vue 3 的写法与 Vue 2 相同。

v-if、v-else-if、v-else

代码示例(Vue 2 和 Vue 3):

<div id="app">
  <p v-if="isVisible">This is visible</p>
  <p v-else>This is hidden</p>
</div>

<script>
export default {
  name: 'app',
  data: {
    isVisible: true
  }
};
</script>
<template>
  <div>
    <p v-if="isVisible">This is visible</p>
    <p v-else>This is hidden</p>
  </div>
</template>

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

const isVisible = ref(true);
</script>

解释
v-if 根据条件渲染元素。Vue 3 中的使用方式与 Vue 2 相同。

v-for

代码示例(Vue 2 和 Vue 3):

<div id="app">
  <ul>
    <li v-for="(item, index) in items" :key="index">{{ item.text }}</li>
  </ul>
</div>

<script>
export default {
  name: 'app',
  data: {
    items: [
      { text: 'Learn Vue.js' },
      { text: 'Build something awesome' }
    ]
  }
};
</script>
<template>
  <ul>
    <li v-for="(item, index) in items" :key="index">{{ item.text }}</li>
  </ul>
</template>

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

const items = ref([
  { text: 'Learn Vue.js' },
  { text: 'Build something awesome' }
]);
</script>

解释
v-for 用于循环渲染列表。Vue 3 中使用方式与 Vue 2 相同,但推荐使用 :key 属性来提高性能。

v-on

代码示例(Vue 2 和 Vue 3):

<div id="app">
  <button v-on:click="showMessage">Click Me</button>
</div>

<script>
export default {
  name: 'app',
  methods: {
    showMessage() {
      alert('Hello, Vue.js!');
    }
  }
};
</script>
<template>
  <button @click="showMessage">Click Me</button>
</template>

<script setup>
function showMessage() {
  alert('Hello, Vue.js!');
}
</script>

解释
v-on 用于绑定事件处理函数。Vue 3 的简写为 @click

v-show

代码示例(Vue 2 和 Vue 3):

<div id="app">
  <p v-show="isVisible">This is visible</p>
</div>

<script>
export default {
  name: 'app',
  data: {
    isVisible: true
  }
};
</script>
<template>
  <p v-show="isVisible">This is visible</p>
</template>

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

const isVisible = ref(true);
</script>

解释
v-show 控制元素的显示和隐藏,与 v-if 的区别在于 v-show 始终渲染元素,但通过 CSS 控制其显示状态。

v-pre

代码示例(Vue 2 和 Vue 3):

<div id="app">
  <p v-pre>{{ rawText }}</p>
</div>

<script>
export default {
  name: 'app',
  data: {
    rawText: 'This will not be compiled'
  }
};
</script>
<template>
  <p v-pre>{{ rawText }}</p

>
</template>

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

const rawText = ref('This will not be compiled');
</script>

解释
v-pre 用于跳过这个元素及其子元素的编译,直接显示原始文本。

v-cloak

代码示例(Vue 2 和 Vue 3):

<div id="app" v-cloak>
  <p>{{ message }}</p>
</div>

<script>
export default {
  name: 'app',
  data: {
    message: 'This is a message'
  }
};
</script>

<style>
[v-cloak] {
  display: none;
}
</style>
<template>
  <div v-cloak>
    <p>{{ message }}</p>
  </div>
</template>

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

const message = ref('This is a message');
</script>

<style>
[v-cloak] {
  display: none;
}
</style>

解释
v-cloak 用于防止 Vue 实例编译完成前页面的闪烁。编译完成后,v-cloak 会被自动移除。

v-once

代码示例(Vue 2 和 Vue 3):

<div id="app">
  <p v-once>{{ message }}</p>
</div>

<script>
export default {
  name: 'app',
  data: {
    message: 'This will only render once'
  }
};
</script>
<template>
  <p v-once>{{ message }}</p>
</template>

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

const message = ref('This will only render once');
</script>

解释
v-once 指令仅渲染元素一次,之后不再更新。这对于性能优化特别有用。


深入探讨

插值表达式的应用

  • 动态内容:可以在模板中动态地插入计算结果或方法调用的返回值,提高模板的灵活性和动态性。
  • 复杂计算:虽然插值表达式可以处理复杂的计算,但推荐将复杂逻辑放在计算属性或方法中,以保持模板的简洁性。

指令的应用与最佳实践

  • v-bind:推荐为动态绑定属性使用 v-bind,并利用简写 : 提高代码的可读性。
  • v-model:在表单控件中使用 v-model 实现双向数据绑定,确保数据的实时更新。
  • v-if 和 v-show:选择使用 v-ifv-show 时应考虑性能和使用场景。v-if 更适合条件较少变化的场景,而 v-show 更适合频繁切换的场景。
  • v-for:在使用 v-for 时,始终使用唯一的 key,以便 Vue 更高效地更新 DOM。

Vue 2 和 Vue 3 的区别

  • Vue 3 引入了更简洁的语法:例如,v-on 的简写 @v-bind 的简写 :
  • Vue 3 的 Composition API:允许在 <script setup> 中使用更简洁的语法来定义数据和方法,避免了 Vue 2 中的 datamethods 等选项的冗长写法。
  • 性能优化:Vue 3 对虚拟 DOM 和响应式系统进行了优化,使得性能比 Vue 2 更高效。

实际应用

案例研究:构建一个简单的用户界面

代码实现(Vue 2):

<div id="app">
  <h1>{{ title }}</h1>
  <input v-model="search" placeholder="Search">
  <ul>
    <li v-for="item in filteredItems" :key="item.id">{{ item.name }}</li>
  </ul>
  <p v-if="filteredItems.length === 0">No items found</p>
</div>

<script>
export default {
  name: 'app',
  data: {
    title: 'User List',
    search: '',
    items: [
      { id: 1, name: 'John Doe' },
      { id: 2, name: 'Jane Smith' },
      { id: 3, name: 'Jack Johnson' }
    ]
  },
  computed: {
    filteredItems() {
      return this.items.filter(item => item.name.toLowerCase().includes(this.search.toLowerCase()));
    }
  }
};
</script>

代码实现(Vue 3 - setup 语法糖):

<template>
  <div>
    <h1>{{ title }}</h1>
    <input v-model="search" placeholder="Search">
    <ul>
      <li v-for="item in filteredItems" :key="item.id">{{ item.name }}</li>
    </ul>
    <p v-if="filteredItems.length === 0">No items found</p>
  </div>
</template>

<script setup>
import { ref, computed } from 'vue';

const title = ref('User List');
const search = ref('');
const items = ref([
  { id: 1, name: 'John Doe' },
  { id: 2, name: 'Jane Smith' },
  { id: 3, name: 'Jack Johnson' }
]);

const filteredItems = computed(() => {
  return items.value.filter(item => item.name.toLowerCase().includes(search.value.toLowerCase()));
});
</script>

解释
在这个例子中,我们使用了 v-model 实现双向数据绑定,v-for 循环渲染用户列表,v-if 用于条件渲染。当用户输入搜索关键词时,filteredItems 计算属性会动态更新显示的用户列表。


总结

回顾主要内容
本文详细介绍了 Vue.js 模板语法中的插值表达式和各种指令,涵盖了 Vue 2 和 Vue 3 的使用方法及其区别。通过具体的代码示例和案例研究,帮助初学者掌握这些基础知识。

重申目标
希望读者能够理解并熟练使用 Vue.js 的模板语法,为构建动态、交互性强的前端界面奠定坚实的基础。

未来展望
在掌握模板语法后,建议读者深入学习 Vue 的组件化开发和 Vuex 状态管理,以进一步提升前端开发技能和应用复杂的业务逻辑。


参考资料

  • Vue.js 官方文档 - 模板语法
  • MDN Web Docs - JavaScript Guide

看到这里的小伙伴,欢迎 点赞👍评论📝收藏🌟

希望这篇关于 Vue.js 模板语法的文章对你有所帮助。如果有其他需要调整或补充的地方,请告诉我!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI游戏革命!谷歌推出GameNGen,实时生成游戏画面,每秒20帧实时模拟

未来&#xff0c; AI会取代传统游戏引擎吗&#xff1f; 谷歌的研究人员发表论文称&#xff0c;他们创建了一个名为GameNGen的AI神经网络&#xff0c;直接用AI生成了整个《Doom》游戏&#xff01; 最令人惊讶的是&#xff0c;他们并没有使用传统的游戏引擎&#xff0c;而是在单…

基于单片机的浴室防雾镜系统设计

1系统方案设计 浴室防雾镜是一种特殊的镜子&#xff0c;在浴室中使用时不会起雾&#xff0c;通过对其需要展开分析&#xff0c;本设计基于51单片机设计的浴室防雾镜的系统架构如图2.1所示&#xff0c;采用了DS18B20温度传感器和人体红外感应红外传感器进行智能控制&#xff0c…

通过住宅代理捕获网站快照:技术解析与未来展望

引言 什么是网站快照&#xff1f;为什么需要网站快照&#xff1f; 网站快照的工作原理是什么&#xff1f; 如何捕获网站快照&#xff1f; 网站快照未来的发展趋势 总结 引言 在当今快速发展的数字时代&#xff0c;网站快照作为一种关键的网页记录技术&#xff0c;扮演着越…

Springboot3整合ELK实现日志可视化

一、环境准备 Elasticsearch、Logstash、Kibana,组合起来可以搭建线上日志系统 ELK中各个服务的作用 Elasticsearch:用于存储收集到的日志信息&#xff1b; Logstash:用于收集日志&#xff0c;SpringBoot应用整合了Logstash以后会把日志发送给Logstash,Logstash再把日志转发…

【Android】UI拓展之滑动菜单、悬浮按钮、CoordinatorLayout布局等

文章目录 一、滑动菜单1. 添加依赖2. 侧滑菜单内容2.1 headerLayout样式2.2 menu样式 3. 主界面添加4. 关联actionbar与滑动菜单 二、悬浮按钮FloatingActionButton 三、可交互提示Snackbar 四、能协调子视图的布局CoordinatorLayout 五、卡片式布局CardView 一、滑动菜单 Draw…

微信小程序服务器费用一年多少?微信小程序开发

在互联网时代&#xff0c;微信小程序已成为众多企业和个人拓展业务、提升服务品质的有力工具。然而对于许多准备涉足小程序领域的朋友来说【开发一个小程序大概需要多少钱】以及【微信小程序服务器费用一年需要多少】是首要关注的问题&#xff0c;今天飞飞将和你们分享小程序服…

【LoRa】SetLoRaSymbNumTimeout寄存器

目录 1 前言2 实验验证疑问2.1 SetRx的timeout模式和SetLoRaSymbNumTimeout2.1.1 实验12.1.2 实验22.1.3 结论 2.2 SetRx的single与continuous模式和SetLoRaSymbNumTimeout2.2.1 实验12.2.2 实验22.2.3 实验3 3 小结 1 前言 本章节介绍LoRa芯片的寄存器SetLoRaSymbNumTimeout&…

服务器部署前后端分离项目vue+springboot

步骤 1-安装java&#xff0c;mysql&#xff0c;nginx环境 服务器先安装宝塔 yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_lts.sh && bash install.sh ed8484bec安装后输入bt 14查看内网链接打开宝塔页面 java&…

uniapp icons图标不显示的问题解决

如图所示 在uniapp开发中 突然发现icons组件不显示图标了 &#xff0c;而且没什么报错 这是为什么 其实这最大的原因就是你上面的代码在取值上没有做好null的判断 导致参数取值报错 因此影响了页面正常的渲染 导致下面的图标都不显示

vsCode多文件标签栏换行显示

1.文件——首选项——点‘设置’ 2.输入 wrap tabs 并勾选Workbench › Editor: Wrap Tabs

安装MySQL,navicat以及Django配置遇到的一些问题

MySQL安装问题 安装MySQL按照了此文章&#xff1a; MySQL数据库下载及安装教程&#xff08;最最新版&#xff09;_mysql下载安装-CSDN博客https://blog.csdn.net/weixin_39289696/article/details/128850498首先是遇到了starting the server红色叉号显示 按照上面文章的介绍…

《机器学习》【项目】 爬虫爬取数据、数据分词、贝叶斯算法、判断分类 <完整实战详解> (全篇完结)

目录 一、回顾爬虫 1、什么是爬虫 2、实操爬虫 1&#xff09;寻找标签位置 2&#xff09;爬取苏某某购产品好评数据 运行代码&#xff1a; 3&#xff09;爬取差评内容 二、数据分词 1、将获取到的好评和差评数据进行初步分词 1&#xff09;初步分词 2&#xff09;内…

华为云征文|1分钟熟悉Flexus X实例基础操作

前言 随着云计算技术的普及&#xff0c;越来越多的企业和个人开始将业务迁移到云端。华为云作为国内领先的云服务提供商&#xff0c;推出了高性能、高可用性的Flexus云服务器X&#xff0c;以满足不同用户的需求。本文将详细介绍如何购买Flexus云服务器X以及初次使用时的基本操…

物联网平台组件2: 平台校验规则

加载不通的规则引擎配置文件&#xff0c;使用DynamicExpresso校验采集数据&#xff0c;得出是否告警 rules.json {"Rules": [{"Description": "温度超过阈值警报","Condition": "temperature > 30","Action":…

2024 Xiangtan University Summer Camp-Div.2 个人题解 (待补完)

前言&#xff1a; 教练突然发在群里的一个比赛&#xff0c;想到自己好像也没什么事干&#xff0c;就参加了个div2&#xff08;太菜了&#xff09;&#xff0c;我看着好像没啥人发这玩意的题解&#xff0c;cf上比赛结束了也看不了别人代码&#xff0c;就将自己的写出题的代码分享…

鸿蒙Next 单元测试框架——hypium

一 框架概述 单元测试框架(hypium)是HarmonyOS上的测试框架&#xff0c;提供测试用例编写、执行、结果显示能力&#xff0c;用于测试系统或应用接口。 表1 单元测试框架功能特性 二 安装使用 目前hypium以npm包的形式发布, 因此需要在Deveco Studio 工程级package.json内配…

Javascript集合引用类型(一)

思维导图 Javascript集合引用类型(一)思维导图 对象 数组与定型数组 Map、WeakMap、Set以及WeakSet类型 1. Object 创建的对象的两种方式&#xff1a;new 操作符和对象字面量 使用对象字面量的更多&#xff0c;因为代码量少&#xff1b; 2. Array Array构造函数,es6新增…

android studio avd设置中文输入法和时间

设置语言 打开avd 找到设置 找到语言 找到系统语言 把中文移动到第一个就是默认语言了 如果想删除英文可以点击三个点有个移除 随便找个输入框&#xff0c;默认就是中文了 设置时间 点击设置->系统->日期和时间 关掉自动设置 选择一下时区为上海即可

【Datawhale X 李宏毅苹果书 AI夏令营】深度学习自适应学习率(AdaGrad/RMSProp/Adam)及其调度

1、自适应学习率 理论上&#xff1a;在训练一个网络&#xff0c;训练到现在参数在临界点附近&#xff0c;再根据特征值的正负号判断该 临界点是鞍点还是局部最小值实际上&#xff1a;①在训练的时候&#xff0c;要走到鞍点或局部最小值非常困难&#xff1b;②多数还未走到临界…

第十周:机器学习笔记

第十周机器学习周报 摘要Abstract机器学习——self-attention&#xff08;注意力机制&#xff09;1. 为什么要用self-attention2. self-attention 工作原理2.1 求α的两种方式2.2 attention-score&#xff08;关联程度&#xff09; Pytorch学习1. 损失函数代码实战1.1 L1loss&a…