「Vue3系列」Vue3 模板语法

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
应用实时监控服务-用户体验监控,每月100OCU免费额度
简介: Vue 3 的模板语法允许你声明式地将数据绑定到 DOM(文档对象模型)。这意味着你可以控制哪些数据会在哪些元素中显示,以及如何根据用户交互或应用状态的变化来更新这些元素。

一、Vue3 模板语法

Vue 3 的模板语法允许你声明式地将数据绑定到 DOM(文档对象模型)。这意味着你可以控制哪些数据会在哪些元素中显示,以及如何根据用户交互或应用状态的变化来更新这些元素。

以下是 Vue 3 模板语法的一些基本要点和示例:

1. 插值表达式

使用双大括号 { { }} 来绑定数据到模板中。

<div>{
  { message }}</div>

在 Vue 实例中:

const app = Vue.createApp({
   
  data() {
   
    return {
   
      message: 'Hello Vue 3!'
    };
  }
});

app.mount('#app');

2. 指令

Vue 指令是以 v- 为前缀的特殊属性。指令属性的值预期是单一 JavaScript 表达式(v-for 是例外情况,稍后我们会讲到)。

v-bind

用于属性绑定。

<div v-bind:id="dynamicId"></div>

在 Vue 实例中:

const app = Vue.createApp({
   
  data() {
   
    return {
   
      dynamicId: 'myDiv'
    };
  }
});

app.mount('#app');

v-on

用于监听 DOM 事件。

<button v-on:click="increment">Increment</button>

在 Vue 实例中:

const app = Vue.createApp({
   
  data() {
   
    return {
   
      count: 0
    };
  },
  methods: {
   
    increment() {
   
      this.count++;
    }
  }
});

app.mount('#app');

v-model

用于在表单元素上创建双向数据绑定。

<input v-model="message" placeholder="edit me">
<p>Message is: {
  { message }}</p>

在 Vue 实例中:

const app = Vue.createApp({
   
  data() {
   
    return {
   
      message: 'Hello Vue!'
    };
  }
});

app.mount('#app');

v-if, v-else-if, v-else

用于条件渲染。

<div v-if="type === 'A'">Type A</div>
<div v-else-if="type === 'B'">Type B</div>
<div v-else>Other Type</div>

在 Vue 实例中:

const app = Vue.createApp({
   
  data() {
   
    return {
   
      type: 'A'
    };
  }
});

app.mount('#app');

v-for

用于列表渲染。

<div v-for="item in items" :key="item.id">
  {
  { item.text }}
</div>

在 Vue 实例中:

const app = Vue.createApp({
   
  data() {
   
    return {
   
      items: [
        {
    id: 1, text: 'Item 1' },
        {
    id: 2, text: 'Item 2' },
        // ...
      ]
    };
  }
});

app.mount('#app');

v-html

v-html 是 Vue 3 中的一个指令,它用于更新元素的 innerHTML。这意味着你可以使用 v-html 来插入原始的 HTML 到 Vue 模板中。然而,出于安全考虑,你应该避免使用 v-html 来插入用户生成的内容,因为这可能会导致跨站脚本攻击(XSS)。

当你需要动态地插入 HTML 内容时,可以使用 v-html 指令,但是你需要确保插入的内容是可信的。

下面是一个使用 v-html 的示例:

<template>
  <div>
    <div v-html="rawHtml"></div>
  </div>
</template>

<script>
export default {
    
  data() {
    
    return {
    
      rawHtml: '<p>这是一段原始的 HTML 内容</p>'
    };
  }
};
</script>

在这个例子中,<div> 元素的 innerHTML 将会被设置为 rawHtml 变量的值,即 <p>这是一段原始的 HTML 内容</p>

注意

  • 当你使用 v-html 时,Vue 不会解析或处理这个 HTML 内容中的 Vue 指令。这是因为 v-html 是直接将内容插入到 DOM 中,而不是作为 Vue 模板进行解析。
  • 由于 v-html 绕过了 Vue 的模板编译过程,因此你不能在插入的 HTML 中使用 Vue 的动态语法,如 { { }}v-for
  • 如果你需要在插入的 HTML 中使用 Vue 的功能,你应该考虑将这部分内容作为 Vue 组件或模板来处理,而不是直接使用 v-html

3. 计算属性和侦听器

计算属性

计算属性是基于它们的依赖进行缓存的。只有在它的相关依赖发生改变时才会重新求值。

<div>{
  { computedMessage }}</div>

在 Vue 实例中:

const app = Vue.createApp({
   
  data() {
   
    return {
   
      firstName: 'Fred',
      lastName: 'Flintstone'
    };
  },
  computed: {
   
    computedMessage() {
   
      return this.firstName + ' ' + this.lastName;
    }
  }
});

app.mount('#app');

侦听器

侦听器用于观察和响应 Vue 实例上的数据变化。

const app = Vue.createApp({
   
  data() {
   
    return {
   
      question: ''
    };
  },
  watch: {
   
    // 当 question 发生变化时,这个函数将会执行
    question(newQuestion, oldQuestion) {
   
      console.log(`question changed from ${
     oldQuestion} to ${
     newQuestion}`);
    }
  }
});

app.mount('#app');

二、Vue3 修饰符

在 Vue 3 中,修饰符(Modifiers)是与指令一同使用的特殊标记,用于修改指令的默认行为。Vue 3 提供了多种修饰符,这些修饰符可以与 v-modelv-onv-show 等指令结合使用。以下是一些 Vue 3 中常见的修饰符及其用法:

1. .lazy 修饰符

.lazy 修饰符用于 v-model,它使得数据只有在输入事件触发时才更新,而不是每次输入字符时都更新。

<input v-model.lazy="message">

2. .number 修饰符

.number 修饰符用于 v-model,它会自动将用户的输入值转换为 Number 类型。

<input v-model.number="age">

3. .trim 修饰符

.trim 修饰符用于 v-model,它会自动去除用户输入值的首尾空格。

<input v-model.trim="name">

4. .stop 修饰符

.stop 修饰符用于 v-on,它相当于调用 event.stopPropagation(),阻止事件冒泡。

<button v-on:click.stop="doThis">阻止冒泡</button>

5. .prevent 修饰符

.prevent 修饰符用于 v-on,它相当于调用 event.preventDefault(),阻止默认事件行为。

<form v-on:submit.prevent="onSubmit">阻止表单提交默认行为</form>

6. .capture 修饰符

.capture 修饰符用于 v-on,它表示使用事件捕获模式监听事件。

<div v-on:click.capture="doThis">事件捕获模式</div>

7. .self 修饰符

.self 修饰符用于 v-on,它只会在事件发生在元素本身时触发,而不是子元素。

<div v-on:click.self="doThat">只响应元素本身的点击</div>

8. .once 修饰符

.once 修饰符用于 v-on,它表示事件将只会触发一次。

<button v-on:click.once="doThisOnce">只触发一次</button>

9. .passive 修饰符

.passive 修饰符用于 v-on,它用于在监听滚动或触摸事件时优化性能,因为它告诉浏览器你不想阻止这些事件的默认行为。

<div v-on:scroll.passive="onScroll">滚动事件监听</div>

10. .exact 修饰符

.exact 修饰符用于 v-on 和键盘事件监听,它表示只有按下指定的键时才会触发事件。

<input v-on:keyup.exact.13="submit">只有在按下 Enter 键时提交</input>

三、Vue3 表达式

在 Vue 3 中,表达式是模板语法中的一个重要概念,它允许你在模板中嵌入 JavaScript 代码来动态地渲染内容、计算值或执行方法。Vue 3 的模板语法使用双大括号 { { }} 来包裹表达式,这些表达式会在 Vue 实例的数据或方法发生变化时自动更新。

下面是一些 Vue 3 中使用表达式的示例:

1. 文本插值

使用双大括号 { { }} 可以在模板中插入 JavaScript 表达式,表达式的值会被计算并插入到 HTML 中。

<template>
  <div>
    <p>Message: {
  { message }}</p>
    <p>Count: {
  { count }}</p>
  </div>
</template>

<script>
export default {
    
  data() {
    
    return {
    
      message: 'Hello Vue 3!',
      count: 10
    };
  }
};
</script>

在这个例子中,{ { message }}{ { count }} 是表达式,它们会被替换为 data 函数中定义的 messagecount 的值。

2. 计算属性

你可以使用表达式来计算值。Vue 会自动处理这些表达式的依赖关系,并在依赖项发生变化时更新结果。

<template>
  <div>
    <p>Reversed message: {
  { message.split('').reverse().join('') }}</p>
  </div>
</template>

<script>
export default {
    
  data() {
    
    return {
    
      message: 'Hello Vue 3!'
    };
  }
};
</script>

在这个例子中,表达式 message.split('').reverse().join('') 会计算出一个反转后的 message 字符串。

3. 方法调用

你可以在表达式中调用 Vue 实例中定义的方法。

<template>
  <div>
    <p>Doubled count: {
  { doubleCount() }}</p>
  </div>
</template>

<script>
export default {
    
  data() {
    
    return {
    
      count: 5
    };
  },
  methods: {
    
    doubleCount() {
    
      return this.count * 2;
    }
  }
};
</script>

在这个例子中,doubleCount() 是一个方法,它在表达式中被调用,并返回 count 的两倍。

4. 指令参数

你也可以在指令中使用表达式来动态地设置参数。

<template>
  <div>
    <img v-bind:src="imageUrl" alt="Vue Logo">
  </div>
</template>

<script>
export default {
    
  data() {
    
    return {
    
      imageUrl: 'https://vuejs.org/images/logo.png'
    };
  }
};
</script>

在这个例子中,v-bind:src="imageUrl" 是一个指令,它使用表达式 imageUrl 来动态地设置 img 元素的 src 属性。

四、相关链接

  1. Vue3官方地址
  2. Vue3中文文档
  3. 「Vue3系列」Vue3简介及安装
  4. 「Vue3系列」Vue3起步/创建项目
  5. 「Vue3系列」Vue3指令
相关文章
|
16天前
|
存储 JavaScript 前端开发
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
【10月更文挑战第21天】 vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
vue3的脚手架模板你真的了解吗?里面有很多值得我们学习的地方!
|
13天前
|
JavaScript 前端开发 开发者
Vue 3中的Proxy
【10月更文挑战第23天】Vue 3中的`Proxy`为响应式系统带来了更强大、更灵活的功能,解决了Vue 2中响应式系统的一些局限性,同时在性能方面也有一定的提升,为开发者提供了更好的开发体验和性能保障。
31 7
|
14天前
|
前端开发 数据库
芋道框架审批流如何实现(Cloud+Vue3)
芋道框架审批流如何实现(Cloud+Vue3)
36 3
|
13天前
|
JavaScript 数据管理 Java
在 Vue 3 中使用 Proxy 实现数据双向绑定的性能如何?
【10月更文挑战第23天】Vue 3中使用Proxy实现数据双向绑定在多个方面都带来了性能的提升,从更高效的响应式追踪、更好的初始化性能、对数组操作的优化到更优的内存管理等,使得Vue 3在处理复杂的应用场景和大量数据时能够更加高效和稳定地运行。
34 1
|
13天前
|
JavaScript 开发者
在 Vue 3 中使用 Proxy 实现数据的双向绑定
【10月更文挑战第23天】Vue 3利用 `Proxy` 实现了数据的双向绑定,无论是使用内置的指令如 `v-model`,还是通过自定义事件或自定义指令,都能够方便地实现数据与视图之间的双向交互,满足不同场景下的开发需求。
34 1
|
16天前
|
前端开发 JavaScript
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
简记 Vue3(一)—— setup、ref、reactive、toRefs、toRef
|
16天前
Vue3 项目的 setup 函数
【10月更文挑战第23天】setup` 函数是 Vue3 中非常重要的一个概念,掌握它的使用方法对于开发高效、灵活的 Vue3 组件至关重要。通过不断的实践和探索,你将能够更好地利用 `setup` 函数来构建优秀的 Vue3 项目。
|
19天前
|
JavaScript API
vue3知识点:ref函数
vue3知识点:ref函数
29 2
|
19天前
|
JavaScript 前端开发 API
vue3知识点:Vue3.0中的响应式原理和 vue2.x的响应式
vue3知识点:Vue3.0中的响应式原理和 vue2.x的响应式
23 0
|
3天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。