【前端】一文掌握 Vue 3 指令用法(vue3 备忘清单)

news2025/4/3 4:58:37

文章目录

    • 入门
      • 介绍
      • 创建应用
      • 应用实例
      • 通过 CDN 使用 Vue
      • 使用 ES 模块构建版本
    • 模板语法
      • 文本插值
      • 原始 HTML
      • Attribute 绑定
      • 布尔型 Attribute
      • 动态绑定多个值
      • 使用 JavaScript 表达式
      • 仅支持表达式(例子都是无效)
      • 调用函数
      • 指令 Directives
      • 参数 Arguments
      • 绑定事件
      • 动态参数
      • 动态的事件名称
      • 修饰符 Modifiers
      • 指令语法
    • 响应式基础
      • 声明状态
      • 声明方法
      • `<script setup>` setup语法糖
      • 用 `ref()` 定义响应式变量
      • 有状态方法
      • 响应式样式
    • 响应式进阶 —— watch 和 computed
      • 监听状态
      • 立即监听状态
      • 监听多个值
      • 计算状态
    • 组件通信
      • defineProps
      • defineEmits
      • defineExpose
      • Provide / Inject
    • 路由
      • 1. 路由的基本使用
        • 开启命名空间后,组件中读取state数据
        • 开启命名空间后,组件中读取getters数据
        • 开启命名空间后,组件中调用dispatch
        • 开启命名空间后,组件中调用commit
      • 2. 路由的使用
      • 3.路由的query
        • 跳转路由并携带参数
      • 4. 命名路由
      • 5.params参数的使用
        • 1. 声明接收
        • 2. 传递
        • 3. 接收
      • 6.props的使用
      • 7. 编程式路由导航
      • 8.缓存路由组件
      • 9.新生命周期钩子
    • 路由守卫
      • 1.前置路由守卫
      • 2.后置路由守卫
      • 3.独享路由守卫
      • 4.组件内路由守卫
    • Vue 中使用 TypeScript
      • 为组件的 props 标注类型
        • Props 解构默认值
      • 为组件的 emits 标注类型
      • 为 ref() 标注类型
      • 为 reactive() 标注类型
      • 为 computed() 标注类型
      • 为事件处理函数标注类型
      • 为 provide / inject 标注类型
      • 为模板引用标注类型
      • 为组件模板引用标注类型
      • 选项式 API 为组件的 props 标注类型
      • 选项式 API 为组件的 emits 标注类型
      • 选项式 API 为计算属性标记类型
      • 选项式 API 为事件处理函数标注类型
      • 选项式 API 扩展全局属性
        • 类型扩展的位置
      • 选项式 API 扩展自定义选项
    • API 参考
      • 全局 API - 应用实例
      • 全局 API - 通用
      • 组合式 API - setup()
      • 组合式 API - 依赖注入
      • 组合式 API - 生命周期钩子
      • 组合式 API - 响应式: 工具
      • 组合式 API - 响应式: 核心
      • 选项式 API - 状态选项
      • 选项式 API - 生命周期选项
      • 选项式 API - 其他杂项
      • 选项式 API - 渲染选项
      • 选项式 API - 组件实例
      • 选项式 API - 组合选项
      • 内置内容 - 指令
      • 内置内容 - 组件
      • 内置内容 - 特殊 Attributes
      • 内置内容 - 特殊元素
      • 单文件组件 - 语法定义
      • 单文件组件 - \<script setup>
      • 单文件组件 - CSS 功能
      • 进阶 API - 渲染函数
      • 进阶 API - 服务端渲染
      • 进阶 API - TypeScript 工具类型
      • 进阶 API - 自定义渲染

渐进式 JavaScript 框架 Vue 3 备忘清单的快速参考列表,包含常用 API 和示例

参考:

  • Vue 3.x 官方文档
  • Vue Router 4.x 官方文档

入门

介绍

Vue 是一套用于构建用户界面的渐进式框架

  • Vue 3.x 官方文档 (cn.vuejs.org)
  • Vue Router 4.x 官方文档 (router.vuejs.org)
  • Vue 2 备忘清单

注意:Vue 3.x 版本对应 Vue Router 4.x 路由版本

创建应用

已安装 16.0 或更高版本的 Node.js

$ npm init vue@latest

指令将会安装并执行 create-vue,它是 Vue 官方的项目脚手架工具

✔ Project name: … <your-project-name>
✔ Add TypeScript? … No/Yes
✔ Add JSX Support? … No/Yes
✔ Add Vue Router for Single Page Application development? … No/Yes
✔ Add Pinia for state management? … No/Yes
✔ Add Vitest for Unit testing? … No/Yes
✔ Add Cypress for both Unit and End-to-End testing? … No/Yes
✔ Add ESLint for code quality? … No/Yes
✔ Add Prettier for code formatting? … No/Yes

Scaffolding project in ./<your-project-name>...
Done.

安装依赖并启动开发服务器

$ cd <your-project-name>
$ npm install
$ npm run dev

当你准备将应用发布到生产环境时,请运行:

$ npm run build

此命令会在 ./dist 文件夹中为你的应用创建一个生产环境的构建版本

应用实例

import {
    createApp, ref } from 'vue'

const app = createApp({
   
  setup() {
   
    const message = ref("Hello Vue3")
    return {
   
      message
    }
  }
})
app.mount('#app')

挂载应用

<div id="app">
  <button @click="count++">
    {
  { count }}
  </button>
</div>

通过 CDN 使用 Vue

<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="app">{
  { message }}</div>
<script>
  const {
      createApp, ref } = Vue
  createApp({
     
    setup() {
     
      const message = ref("Hello Vue3")
      return {
     
        message
      }
    }
  }).mount('#app')
</script>

使用 ES 模块构建版本

<div id="app">{
  { message, ref }}</div>
<script type="module">
  import {
      createApp, ref } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
  createApp({
     
    setup() {
     
      const message = ref("Hello Vue3")
      return {
     
        message
      }
    }
  }).mount('#app')
</script>

模板语法

文本插值

<span>Message: {
  { msg }}</span>

使用的是 Mustache 语法 (即双大括号),每次 msg 属性更改时它也会同步更新

原始 HTML

<p>Using text interpolation: {
  { rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>

双大括号{ {}}会将数据解释为纯文本,使用 v-html 指令,将插入 HTML

Attribute 绑定

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

简写

<div :id="dynamicId"></div>

布尔型 Attribute

<button :disabled="isButtonDisabled">
  Button
</button>

动态绑定多个值

通过不带参数的 v-bind,你可以将它们绑定到单个元素上

<script setup>
  import comp from "./Comp.vue"
  import {
     ref} from "vue"
  const a = ref("hello")
  const b = ref("world")
</script>

<template>
  <comp v-bind="{a, b}"></comp>
</template>

如果你是使用的 setup 语法糖。需要使用 defineprops 声名(可以直接使用a/b

const props = defineProps({
   
  a: String,
  b: String
})

使用 JavaScript 表达式

{
  { number + 1 }}
{
  { ok ? 'YES' : 'NO' }}
{
  { message.split('').reverse().join('') }}

<div :id="`list-${id}`"></div>

仅支持表达式(例子都是无效)

<!-- 这是一个语句,而非表达式 -->
{
  { var a = 1 }}
<!-- 条件控制也不支持,请使用三元表达式 -->
{
  { if (ok) { return message } }}

调用函数

<span :title="toTitleDate(date)">
  {
  { formatDate(date) }}
</span>

指令 Directives

<p v-if="seen">Now you see me</p>

参数 Arguments

<a v-bind:href="url"> ... </a>
<!-- 简写 -->
<a :href="url"> ... </a>

绑定事件

<a v-on:click="doSomething"> ... </a>
<!-- 简写 -->
<a @click="doSomething"> ... </a>

动态参数

<a v-bind:[attributeName]="url"> ... </a>
<!-- 简写 -->
<a :[attributeName]="url"> ... </a>

这里的 attributeName 会作为一个 JS 表达式被动态执行

动态的事件名称

<a v-on:[eventName]="doSomething"> ... </a>
<!-- 简写 -->
<a @[eventName]="doSomething">

修饰符 Modifiers

<form @submit.prevent="onSubmit">
  ...
</form>

.prevent 修饰符会告知 v-on 指令对触发的事件调用 event.preventDefault()

指令语法

v-on:submit.prevent="onSubmit"
──┬─ ─┬──── ─┬─────  ─┬──────
  ┆   ┆      ┆        ╰─ Value 解释为JS表达式
  ┆   ┆      ╰─ Modifiers 由前导点表示
  ┆   ╰─ Argument 跟随冒号或速记符号
  ╰─ Name 以 v- 开头使用速记时可以省略

响应式基础

声明状态

<div>{
  { state.count }}</div>

import {
    defineComponent, reactive } from 'vue';

// `defineComponent`用于IDE推导类型
export default defineComponent({
   
  // setup 用于组合式 API 的特殊钩子函数
  setup() {
   
    const state = reactive({
    count: 0 });

    // 暴露 state 到模板
    return {
   
      state
    };
  },
});

声明方法

<button @click="increment">
  {
  { state.count }}
</button>

import {
    defineComponent, reactive } from 'vue';

export default defineComponent({
   
  setup() {
   
    const state = reactive({
    count: 0 });

    function increment() {
   
      state.count++;
    }

    // 不要忘记同时暴露 increment 函数
    return {
   
      state,
      increment
    };
  },
})

<script setup> setup语法糖

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

const state = reactive({
      count: 0 })

function increment() {
     
  state.count++
}
</script>

<template>
  <button @click="increment">
    {
  { state.count }}
  </button>
</template>

setup 语法糖用于简化代码,尤其是当需要暴露的状态和方法越来越多时

ref() 定义响应式变量

reactive只能用于对象、数组和 MapSet 这样的集合类型,对 string、number 和 boolean 这样的原始类型则需要使用ref

import {
    ref } from 'vue';

const count = ref(0);

console.log(count); // { value: 0 }
console.log(count.value); // 0
count.value++;
console.log(count.value); // 1
const objectRef = ref({
    count: 0 });

// 这是响应式的替换
objectRef.value = {
    count: 1 };
const obj = {
   
  foo: ref(1),
  bar: ref(2)
};
// 该函数接收一个 ref
// 需要通过 .value 取值
// 但它会保持响应性
callSomeFunction(obj.foo);

// 仍然是响应式的
const {
    foo, bar } = obj;

在 html 模板中不需要带 .value 就可以使用

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

const count = ref(0);
</script>

<template>
  <div>
    {
  { count }}
  </div>
</template>

有状态方法

import {
    reactive, defineComponent, onUnmounted }

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

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

相关文章

visio导出pdf公式变形

情况描述导出为pdf后&#xff0c;mathtype写的公式就变形了 但是导出为png和jpg就是正常 解决方法就是 需要下载一个Adobe Acrobat

【学习笔记】计算机网络(六)

第6章应用层 文章目录 第6章应用层6.1 域名系统DNS6.1.1 域名系统概述6.1.2 互联网的域名结构6.1.3 域名服务器域名服务器的分区管理DNS 域名服务器的层次结构域名服务器的可靠性域名解析过程-两种查询方式DNS 高速缓存机制 6.2 文件传送协议6.2.1 FTP 概述6.2.2 FTP 的基本工作…

量子退火与机器学习(2):少量实验即可找到新材料,黑盒优化➕量子退火

使用量子退火和因子分解机设计新材料 这篇文章是东京大学的一位博士生的毕业论文中的主要贡献。 结合了黑盒优化和量子退火&#xff0c;是融合的非常好的一篇文章&#xff0c;在此分享给大家。 https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.2.0133…

【React】基于 React+Tailwind 的 EmojiPicker 选择器组件

1.背景 React 写一个 EmojiPicker 组件&#xff0c;基于 emoji-mart 组件二次封装。支持添加自定义背景 、Emoji 图标选择&#xff01;并在页面上展示&#xff01; 2.技术栈 emoji-mart/data 、emoji-mart : emoji 图标库、元数据 tailwindcss: 原子化 CSS 样式库 antd : 组…

02-Docker 使用

docker:快速构建、运行、管理应用的工具,可以帮助我们下载应用镜像,创建并运行镜像的容器,从而快速部署应用 1、部署mysql 先停掉虚拟机中的MySQL,确保你的虚拟机已经安装Docker,且网络开通的情况下,执行下面命令即可安装MySQL(注意:若服务器上已经有mysql 占用了330…

html5时钟升级!支持切换深浅模式 Canvas实现现代化动态时钟

HTML5 Canvas实现现代化动态时钟 这里写目录标题 HTML5 Canvas实现现代化动态时钟项目介绍技术实现1. 项目架构2. Canvas绘图实现2.1 表盘绘制2.2 刻度绘制2.3 指针绘制 3. 动画效果4. 主题切换 项目亮点技术要点总结项目收获改进方向结语 项目介绍 本项目使用HTML5 Canvas技术…

MOE-1 基本认识

解读一下MOE架构&#xff0c;部分内容图片参考自油管。 首先来简单了解一下什么是MoE&#xff08;Mixture of Experts&#xff0c;专家混合&#xff09; MoE&#xff08;Mixture of Experts&#xff09;是一种深度学习架构&#xff0c;其核心思想是通过**多个专家网络&#xf…

【C++接入大模型】WinHTTP类封装:实现对话式大模型接口访问

一、类设计概述 近期准备用C做一些大预言模型方面的开发&#xff0c;先期计划实现C调用公共的大模型Web接口&#xff0c;因为之前没做过C的Web开发&#xff0c;经验少&#xff0c;所以对比了一些主流的框架&#xff0c;包括实际测试验证。以下是Windows平台下主流C HTTP库的对…

【银河麒麟高级服务器操作系统 】虚拟机运行数据库存储异常现象分析及处理全流程

更多银河麒麟操作系统产品及技术讨论&#xff0c;欢迎加入银河麒麟操作系统官方论坛 https://forum.kylinos.cn 了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer…

文件分享系统--开源的可视化文件共享管理工具

家里有公网&#xff0c;经常要发文件给别人&#xff0c;文件几个G发送还要云盘或者倒手一次才行&#xff0c;所以弄了个文件分享系统&#xff0c;这个是用字节的 AI Trae 写的&#xff0c;反正反复折腾还是弄出来了。东西挺好用&#xff0c;可以拖拽多个文件上传也可以手动添加…

【力扣刷题实战】寻找数组的中心下标

大家好&#xff0c;我是小卡皮巴拉 文章目录 目录 力扣题目&#xff1a;寻找数组的中心下标 题目描述 解题思路 问题理解 算法选择 具体思路 解题要点 完整代码&#xff08;C&#xff09; 兄弟们共勉 &#xff01;&#xff01;&#xff01; 每篇前言 博客主页&#…

LearnOpenGL小练习(QOpenGLWidget版本)

你好&#xff0c;三角形 1.绘制两个彼此相连的三角形 画两个独立的三角形&#xff0c;给出两个三角形顶点&#xff0c;使用GL_TRIANGLES绘图即可。 关键代码 void MyOpenglWgt::initializeGL() {initializeOpenGLFunctions(); // 1. 创建ShaderProgram着色器&#xff1a;加…

基于OpenCV+MediaPipe手部追踪

一、技术栈 1. OpenCV&#xff08;Open Source Computer Vision Library&#xff09; 性质&#xff1a;开源计算机视觉库&#xff08;Library&#xff09; 主要功能&#xff1a; 图像/视频的基础处理&#xff08;读取、裁剪、滤波、色彩转换等&#xff09; 特征检测&#xf…

十五届蓝桥杯省赛Java B组(持续更新..)

目录 十五届蓝桥杯省赛Java B组第一题&#xff1a;报数第二题&#xff1a;类斐波那契数第三题&#xff1a;分布式队列第四题&#xff1a;食堂第五题&#xff1a;最优分组第六题&#xff1a;星际旅行第七题&#xff1a;LITS游戏第八题&#xff1a;拼十字 十五届蓝桥杯省赛Java B…

蓝耘平台API深度剖析:如何高效实现AI应用联动

目录 一、蓝耘平台简介 1.1 蓝耘通义大模型 1.2 蓝耘云计算资源 1.3 蓝耘API与微服务 二、 蓝耘平台应用联动场景 2.1 数据采集与预处理联动 2.2 模型推理与后端服务联动 2.3 跨平台联动 三、蓝耘平台注册体验功能 3.1 注册 3.2 体验蓝耘MaaS平台如何使用海螺AI生成视频…

缓存 “三剑客”

缓存 “三剑客” 问题 如何保证 Redis 缓存和数据库的一致性&#xff1f; 1. 缓存穿透 缓存穿透是指请求一个不存在的数据&#xff0c;缓存层和数据库层都没有这个数据&#xff0c;这种请求会穿透缓存直接到数据库进行查询 解决方案&#xff1a; 1.1 缓存空值或特殊值 查一…

ComfyUi教程之阿里的万象2.1视频模型

ComfyUi教程之阿里的万象2.1视频模型 官网Wan 2.1 特点 一、本地安装1.1克隆仓库1.2 安装依赖&#xff08;1.3&#xff09;下载模型&#xff08;1.4&#xff09;CUDA和CUDNN 二、 使用体验&#xff08;2.1&#xff09;官方例子&#xff08;2.2&#xff09;执行过程&#xff08;…

Leetcode 寻找两个正序数组的中位数

&#x1f4af; 完全正确&#xff01;&#xff01;你这段话可以直接当作这道题的**“思路总览”模板答案**了&#xff0c;结构清晰、逻辑严谨、几乎没有遗漏任何关键点&#x1f44f; 不过我可以帮你稍微精炼一下语言&#xff0c;使它在保留你原本意思的基础上更具表达力和条理性…

C#测试Excel开源组件ExcelDataReader

使用微软的com组件Microsoft.office.Interop.Excel读写Excel文件虽然可用&#xff0c;但是列多、行多的时候速度很慢&#xff0c;之前测试过Sylvan.Data.Excel包的用法&#xff0c;如果只是读取Excel文件内容的话&#xff0c;还可以使用ExcelDataReader包&#xff0c;后者是C#开…

手机零售行业的 AI 破局与创新降本实践 | OceanBase DB大咖说

OceanBase《DB 大咖说》第 20 期&#xff0c;我们邀请了九机与九讯云的技术总负责人&#xff0c;李远军&#xff0c;为我们分享手机零售企业如何借力分布式数据库OceanBase&#xff0c;赋能 AI 场景&#xff0c;并通过简化架构实现成本管控上的突破与创新。 李远军于2016年加入…