当前位置: 首页 > news >正文

Vue.js 学习笔记

文章目录

    • 前言
    • 一、Vue.js 基础概念
      • 1.1 Vue.js 简介
      • 1.2 Vue.js 的特点
      • 1.3 Vue.js 基础示例
    • 二、Vue.js 常用指令
      • 2.1 双向数据绑定(`v-model`)
      • 2.2 条件渲染(`v-if` 和 `v-show`)
      • 2.3 列表渲染(`v-for`)
      • 2.4 事件处理(`v-on`)
      • 2.5 表单绑定(`v-model`)
    • 三、Vue.js 组件化开发
      • 3.1 组件的概念
      • 3.2 创建组件
        • 3.2.1 全局注册
        • 3.2.2 局部注册
      • 3.3 组件间通信
        • 3.3.1 父子组件通信
      • 3.4 组件的生命周期
    • 四、Vue.js 计算属性与侦听器
      • 4.1 计算属性
      • 4.2 侦听器
    • 五、Vue.js 路由与状态管理
      • 5.1 Vue Router
      • 5.2 Vuex
    • 六、总结

前言

在前端开发领域,Vue.js 以其轻量级、易上手和高性能的特点,赢得了众多开发者的青睐。作为一名前端小白,我也踏上了学习 Vue.js 的旅程。本文将分享我的学习笔记,涵盖 Vue.js 的基础概念、常用指令、组件化开发、计算属性与侦听器、路由和状态管理等知识点,并附上代码示例,希望能帮助到同样在学习 Vue.js 的你。

一、Vue.js 基础概念

1.1 Vue.js 简介

Vue.js 是一款用于构建用户界面的渐进式 JavaScript 框架。它采用直观的模板语法,降低了学习成本,并通过响应式数据绑定,实现了数据与视图的自动同步更新。Vue.js 的组件化开发模式,使代码结构更加清晰、可维护性强,非常适合构建大型应用。

1.2 Vue.js 的特点

  • 易学易用:Vue.js 的 API 设计简洁明了,即使是初学者也能快速上手。
  • 响应式数据绑定:通过双向绑定(v-model),数据与视图能够自动同步更新,减少了手动操作 DOM 的繁琐。
  • 组件化开发:将 UI 界面拆分成多个独立的组件,提高了代码的复用性和可维护性。
  • 生态丰富:Vue.js 拥有完善的生态系统,包括 Vue Router、Vuex 等官方维护的配套工具,方便构建单页应用(SPA)。

1.3 Vue.js 基础示例

下面是一个简单的 Vue.js 实例,展示了数据绑定和事件处理的基本用法:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Vue.js 基础示例</title><script src="https://cdn.jsdelivr.net/npm/vue@3"></script>
</head>
<body><div id="app"><h1>{{ message }}</h1><button @click="changeMessage">点击修改消息</button></div><script>const app = Vue.createApp({data() {return {message: 'Hello, Vue.js!'};},methods: {changeMessage() {this.message = '消息已修改!';}}});app.mount('#app');</script>
</body>
</html>

在上述代码中,我们通过 data 函数定义了组件的数据 message,并通过 methods 定义了点击按钮时触发的方法 changeMessage。在模板中,使用 {{ message }} 实现了数据的插值显示,使用 @click 指令绑定了点击事件。

二、Vue.js 常用指令

2.1 双向数据绑定(v-model

v-model 指令用于实现表单输入和应用状态之间的双向数据绑定。当输入框的值发生变化时,绑定的数据也会自动更新,反之亦然。

<div id="app"><input v-model="message" placeholder="编辑消息"><p>输入的消息是:{{ message }}</p>
</div><script>const app = Vue.createApp({data() {return {message: 'Hello, Vue!'};}});app.mount('#app');
</script>

2.2 条件渲染(v-ifv-show

v-if 指令用于条件渲染,只有在条件为 true 时,元素才会被渲染到 DOM 中。而 v-show 指令则是通过 CSS 的 display 属性来控制元素的显示和隐藏,元素始终存在于 DOM 中。

<div id="app"><button @click="toggle">切换显示</button><p v-if="isVisible">现在你看到我了</p><p v-show="isVisible">我也能切换显示</p>
</div><script>const app = Vue.createApp({data() {return {isVisible: true};},methods: {toggle() {this.isVisible = !this.isVisible;}}});app.mount('#app');
</script>

2.3 列表渲染(v-for

v-for 指令用于遍历数组或对象,并渲染列表。在使用 v-for 时,建议为每个列表项指定一个唯一的 key 属性,以提高渲染性能。

<div id="app"><ul><li v-for="(item, index) in items" :key="index">{{ item }}</li></ul>
</div><script>const app = Vue.createApp({data() {return {items: ['苹果', '香蕉', '橙子', '葡萄']};}});app.mount('#app');
</script>

2.4 事件处理(v-on

v-on 指令用于监听 DOM 事件,并在事件触发时执行相应的 JavaScript 代码。在 Vue.js 中,事件处理函数可以定义在组件的 methods 中。

<div id="app"><button v-on:click="sayHello">点击我</button><p>你点击了 {{ count }} 次</p>
</div><script>const app = Vue.createApp({data() {return {count: 0};},methods: {sayHello() {this.count++;alert('你好,Vue.js!');}}});app.mount('#app');
</script>

2.5 表单绑定(v-model

v-model 指令用于实现表单输入和应用状态之间的双向绑定。当输入框的值发生变化时,绑定的数据也会自动更新,反之亦然。

<div id="app"><input v-model="message" placeholder="输入消息"><p>你输入的消息是:{{ message }}</p>
</div><script>const app = Vue.createApp({data() {return {message: ''};}});app.mount('#app');
</script>

三、Vue.js 组件化开发

3.1 组件的概念

组件是 Vue.js 最强大的功能之一,它允许我们将 UI 拆分成独立、可复用的部分。通过组件化开发,我们可以将复杂的界面分解为多个简单的组件,提高代码的可维护性和复用性。

3.2 创建组件

3.2.1 全局注册

全局注册的组件可以在整个 Vue 应用中使用。我们可以通过 app.component 方法进行全局注册。

<div id="app"><my-component></my-component>
</div><script>const MyComponent = {template: '<p>这是一个全局注册的组件</p>'};const app = Vue.createApp({});app.component('my-component', MyComponent);app.mount('#app');
</script>
3.2.2 局部注册

局部注册的组件只能在当前组件中使用。我们可以通过 components 选项来局部注册组件。

<div id="app"><child-component></child-component>
</div><script>const ChildComponent = {template: '<p>这是一个局部注册的组件</p>'};const app = Vue.createApp({components: {'child-component': ChildComponent}});app.mount('#app');
</script>

3.3 组件间通信

3.3.1 父子组件通信

父子组件之间的通信可以通过 propsemit 实现。父组件可以通过 props 向子组件传递数据,子组件可以通过 emit 向父组件发送事件。

父组件:

<div id="app"><child-component :message="parentMessage" @update-message="updateMessage"></child-component>
</div><script>const ChildComponent = {props: ['message'],template: `<div><p>子组件收到的消息:{{ message }}</p><input v-model="childMessage" @input="sendMessage"></div>`,data() {return {childMessage: ''};},methods: {sendMessage() {this.$emit('update-message', this.childMessage);}}};const app = Vue.createApp({data() {return {parentMessage: '你好,子组件!'};},components: {'child-component': ChildComponent},methods: {updateMessage(newMessage) {this.parentMessage = newMessage;}}});app.mount('#app');
</script>

3.4 组件的生命周期

组件的生命周期是指组件从创建到销毁的整个过程。Vue.js 提供了一系列的生命周期钩子函数,我们可以在这些钩子函数中执行特定的逻辑。

<div id="app"><button @click="toggleComponent">切换组件</button><div v-if="showComponent"><my-component></my-component></div>
</div><script>const MyComponent = {template: '<p>这是一个生命周期示例组件</p>',data() {return {count: 0};},beforeCreate() {console.log('组件创建前');},created() {console.log('组件创建后');},beforeMount() {console.log('组件挂载前');},mounted() {console.log('组件挂载后');},beforeUpdate() {console.log('组件更新前');},updated() {console.log('组件更新后');},beforeUnmount() {console.log('组件卸载前');},unmounted() {console.log('组件卸载后');}};const app = Vue.createApp({data() {return {showComponent: true};},methods: {toggleComponent() {this.showComponent = !this.showComponent;}}});app.mount('#app');
</script>

四、Vue.js 计算属性与侦听器

4.1 计算属性

计算属性是基于其依赖项进行计算的属性。计算属性会根据依赖项的变化自动更新,非常适合用于需要根据数据进行复杂计算的场景。

<div id="app"><p>原消息:{{ message }}</p><p>计算后的消息:{{ computedMessage }}</p><button @click="changeMessage">修改消息</button>
</div><script>const app = Vue.createApp({data() {return {message: 'Hello, Vue.js!'};},computed: {computedMessage() {return this.message.toUpperCase();}},methods: {changeMessage() {this.message = '消息已修改!';}}});app.mount('#app');
</script>

4.2 侦听器

侦听器用于监听数据的变化,并在数据变化时执行特定的逻辑。侦听器可以通过 watch 选项来定义。

<div id="app"><p>输入的消息:{{ message }}</p><input v-model="message" placeholder="输入消息">
</div><script>const app = Vue.createApp({data() {return {message: ''};},watch: {message(newVal, oldVal) {console.log(`消息从 ${oldVal} 变为 ${newVal}`);}}});app.mount('#app');
</script>

五、Vue.js 路由与状态管理

5.1 Vue Router

Vue Router 是 Vue.js 的官方路由库,用于构建单页应用(SPA)。通过 Vue Router,我们可以实现页面的动态跳转和路由管理。

安装 Vue Router:

npm install vue-router

基本用法:

<div id="app"><router-link to="/home">首页</router-link><router-link to="/about">关于</router-link><router-view></router-view>
</div><script>import { createApp } from 'vue';import { createRouter, createWebHistory } from 'vue-router';const Home = { template: '<p>这是首页</p>' };const About = { template: '<p>这是关于页</p>' };const routes = [{ path: '/home', component: Home },{ path: '/about', component: About }];const router = createRouter({history: createWebHistory(),routes});const app = createApp({});app.use(router);app.mount('#app');
</script>

5.2 Vuex

Vuex 是 Vue.js 的官方状态管理库,用于集中管理应用的状态。通过 Vuex,我们可以实现组件之间的状态共享和状态管理。

安装 Vuex:

npm install vuex

基本用法:

<div id="app"><div>{{ count }}</div><button @click="increment">增加</button><button @click="decrement">减少</button>
</div><script>import { createApp } from 'vue';import { createStore } from 'vuex';const store = createStore({state: {count: 0},mutations: {increment(state) {state.count++;},decrement(state) {state.count--;}}});const app = createApp({});app.use(store);app.mount('#app');
</script>

六、总结

通过以上的学习,我们掌握了 Vue.js 的基础概念、常用指令、组件化开发、计算属性与侦听器、路由和状态管理等知识点。Vue.js 以其简洁的语法和强大的功能,为我们提供了高效的前端开发体验。希望这些学习笔记能帮助你更好地理解和使用 Vue.js,开启你的前端开发之旅!在这里插入图片描述

相关文章:

Vue.js 学习笔记

文章目录 前言一、Vue.js 基础概念1.1 Vue.js 简介1.2 Vue.js 的特点1.3 Vue.js 基础示例 二、Vue.js 常用指令2.1 双向数据绑定&#xff08;v-model&#xff09;2.2 条件渲染&#xff08;v-if 和 v-show&#xff09;2.3 列表渲染&#xff08;v-for&#xff09;2.4 事件处理&am…...

数据存储:一文掌握RabbitMQ的详细使用

文章目录 一、RabbitMQ简介二、RabbitMQ的概述2.1 基本概念2.2 实际应用场景三、RabbitMQ的安装与配置3.1 安装RabbitMQ3.2 启用管理插件四、使用Python操作RabbitMQ4.1 安装Pika库4.2 生产者示例4.3 消费者示例4.4 发布/订阅模式示例五、RabbitMQ的高级特性5.1 消息持久化5.2 …...

辛格迪客户案例 | 祐儿医药科技GMP培训管理(TMS)项目

01 项目背景&#xff1a;顺应行业趋势&#xff0c;弥补管理短板 随着医药科技行业的快速发展&#xff0c;相关法规和标准不断更新&#xff0c;对企业的质量管理和人员培训提出了更高要求。祐儿医药科技有限公司&#xff08;以下简称“祐儿医药”&#xff09;作为一家专注于创新…...

FreeRtos实时系统: 十六.tickless低功耗模式

FreeRtos实时系统: 十六.tickless低功耗模式 一.tickless低功耗模式简介二.tickless模式详解三.tickless模式相关配置项四.tickless低功耗模式实验五.课堂总结 一.tickless低功耗模式简介 STM32低功耗模式&#xff1a; 二.tickless模式详解 为了可以降低功耗&#xff0c;又不…...

CSDN博客:Markdown编辑语法教程总结教程(上)

❤个人主页&#xff1a;折枝寄北的博客 Markdown编辑语法教程总结 前言1. CSDN Markdown编辑器功能简介1.1 基础操作界面1.2 创作助手和语法说明 2. Markdown编辑器语法2.1 目录2.2 标题2.2.1 标题级别设置2.2.2 标题居中 3. 文本样式3.1 强调文本&#xff08;斜体&#xff09…...

多个pdf合并成一个pdf的方法

将多个PDF文件合并优点&#xff1a; 能更容易地对其进行归档和备份.打印时可以选择双面打印&#xff0c;减少纸张的浪费。比如把住宿发票以及滴滴发票、行程单等生成一个pdf&#xff0c;双面打印或者无纸化办公情况下直接发送给财务进行存档。 方法: 利用PDF24 Tools网站 …...

Spark基础篇 RDD、DataFrame与DataSet的关系、适用场景与演进趋势

一、核心概念与演进背景 1.1 RDD(弹性分布式数据集) 定义:RDD 是 Spark 最早的核心抽象(1.0版本引入),代表不可变、分区的分布式对象集合,支持函数式编程和容错机制。特点: 无结构化信息:仅存储对象本身,无法自动感知数据内部结构(如字段名、类型)。编译时类型安全…...

odoo初始化数据库

在 Odoo 中&#xff0c;初始化数据库的命令会因使用的环境和启动方式而有所不同&#xff0c;下面为你详细介绍几种常见的初始化数据库的方式。 1. 使用命令行工具初始化 在命令行中&#xff0c;你可以使用 Odoo 的启动脚本并结合相关参数来初始化数据库。以下是基本的命令格式…...

大模型WebUI:Gradio全解12——LangChain原理、架构和组件(2)

大模型WebUI:Gradio全解12——LangChain原理、架构和组件(2) 前言12. LangChain原理及agents构建Gradio UI12.2 学习资料12.2.1 学习文档12.2.2 用途示例12.2.3 OpenAI和DeepSeek例程1. OpenAI示例2. DeepSeek例程参考文献前言 本系列文章主要介绍WEB界面工具Gradio。Gradi…...

1. 搭建前端+后端开发框架

1. 说明 本篇博客主要介绍网页开发中&#xff0c;搭建前端和后端开发框架的具体步骤&#xff0c;框架中所使用的技术栈如下&#xff1a; 前端&#xff1a;VUE Javascript 后端&#xff1a;Python Flask Mysql 其中MySQL主要用来存储需要的数据&#xff0c;在本文中搭建基本…...

初会学习记录

目录 务实&#xff1a; 第一章 (1)会计概念&#xff0c;职能和目标&#xff1a; (2)会计假设&#xff1a; (3)会计核算基础&#xff1a; (4)会计信息质量要求&#xff1a; (5)会计人员职业道德规范 (6)会计准则制度体系概述&#xff1a; (7)会计要素与会计等式&#x…...

DeepSeek 使用窍门与提示词写法指南

一、通用提示词技巧 窍门分类技巧说明示例提示词明确需求用“角色任务要求”明确目标作为健身教练&#xff0c;为30岁上班族设计一周减脂计划&#xff0c;需包含饮食和15分钟居家训练结构化提问分步骤、分模块提问第一步&#xff1a;列出Python爬虫必备的5个库&#xff1b;第二…...

【大模型】DeepSeek核心技术之MLA (Multi-head Latent Attention)

文章目录 1. Multi-Head Attention (MHA)2. Multi-head Latent Attention (MLA)2.1 低秩压缩2.2 应用RoPE2.3 矩阵融合 参考资料 在讲解MLA之前&#xff0c;需要大家对几个基础的概念&#xff08;KV Cache&#xff0c; Grouped-Query Attention (GQA), Multi-Query Attention (…...

七、JOIN 语法详解与实战示例

一、JOIN 的作用与分类 JOIN 操作用于合并两个或多个表的行&#xff0c;基于表之间的关联字段。以下是常见的 JOIN 类型&#xff1a; JOIN 类型描述INNER JOIN返回两个表匹配的记录LEFT JOIN返回左表所有记录 右表匹配记录&#xff08;右表无匹配则为NULL&#xff09;RIGHT …...

Skynet入门(一)

概念 skynet 是一个为网络游戏服务器设计的轻量框架。但它本身并没有任何为网络游戏业务而特别设计的部分&#xff0c;所以尽可以把它用于其它领域。 设计初衷 如何充分利用它们并行运作数千个相互独立的业务。 模块设计建议 在 skynet 中&#xff0c;用服务 (service) 这…...

单片机栈和堆、FALSH、区别

1. Flash&#xff08;闪存&#xff09;&#xff08;程序存储器&#xff09; 用途 存储程序代码&#xff1a;编译后的机器指令&#xff08;如 .text 段&#xff09;、常量数据&#xff08;如 .rodata 段&#xff09;等。 掉电不丢失&#xff1a;程序固化在 Flash 中&#xff0…...

【FL0090】基于SSM和微信小程序的球馆预约系统

&#x1f9d1;‍&#x1f4bb;博主介绍&#x1f9d1;‍&#x1f4bb; 全网粉丝10W,CSDN全栈领域优质创作者&#xff0c;博客之星、掘金/知乎/b站/华为云/阿里云等平台优质作者、专注于Java、小程序/APP、python、大数据等技术领域和毕业项目实战&#xff0c;以及程序定制化开发…...

如何把word文档整个文档插入到excel表格里?

现象&#xff1a; 当我们双击此文档时可以快速打开对应的word文档 实现步骤&#xff1a; 1、点击一下要插入的excel表格里的单元格 2、选择上方的的【插入】【附件】的下拉框下的【对象】 3、选择【由文件创建】-【浏览】 再在弹出的框中选择【桌面】&#xff0c;选择要插…...

PDF文档中表格以及形状解析

我们在做PDF文档解析时有时需要解析PDF文档中的表格、形状等数据。跟解析文本类似的常见的解决方案也是两种。文档解析跟ocr技术处理。下面我们来看看使用文档解析的方案来做PDF文档中的表格、图形解析&#xff08;使用pdfium库&#xff09;。 表格解析&#xff1a; 在pdfium库…...

C++20 Lambda表达式新特性:包扩展与初始化捕获的强强联合

文章目录 一、Lambda表达式的历史回顾二、C20 Lambda表达式的两大新特性&#xff08;一&#xff09;初始化捕获&#xff08;Init-Capture&#xff09;&#xff08;二&#xff09;包扩展&#xff08;Pack Expansion&#xff09; 三、结合使用初始化捕获与包扩展&#xff08;一&a…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...

简单聊下阿里云DNS劫持事件

阿里云域名被DNS劫持事件 事件总结 根据ICANN规则&#xff0c;域名注册商&#xff08;Verisign&#xff09;认定aliyuncs.com域名下的部分网站被用于非法活动&#xff08;如传播恶意软件&#xff09;&#xff1b;顶级域名DNS服务器将aliyuncs.com域名的DNS记录统一解析到shado…...

SDU棋界精灵——硬件程序ESP32实现opus编码

一、 ​​音频处理框架​ 该项目基于Espressif的音频处理框架构建,核心组件包括 ESP-ADF 和 ESP-SR,以下是完整的音频处理框架实现细节: 1.核心组件 (1) 音频前端处理 (AFE - Audio Front-End) ​​main/components/audio_pipeline/afe_processor.c​​功能​​: 声学回声…...