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,开启你的前端开发之旅!在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】基础语法三

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解Python的函数、列表和数组。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! > 专栏选自&#xff…

传奇3光通版手游行会战攻略:团队协作与战术布局详解

戳一戳&#xff1b;了解更多 在《传奇3光通版》手游中&#xff0c;行会战是玩家们展现团队协作与战术布局的重要舞台。下面&#xff0c;我们就来详细解析一下行会战中的团队协作与战术布局攻略。 一、团队协作 ​职业搭配 在行会战中&#xff0c;合理的职业搭配至关重要。一般…

unity学习56:旧版legacy和新版TMP文本输入框 InputField学习

目录 1 旧版文本输入框 legacy InputField 1.1 新建一个文本输入框 1.2 InputField 的子物体构成 1.3 input field的的component 1.4 input Field的属性 2 过渡 transition 3 控件导航 navigation 4 占位文本 placeholder 5 文本 text 5.1 文本内容&#xff0c;用户…

99分巧克力

99分巧克力 ⭐️难度&#xff1a;中等 &#x1f31f;考点&#xff1a;二分 2017省赛真题 &#x1f4d6; &#x1f4da; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();i…

Python 基础知识全面总结

Python 是一种广泛应用的编程语言&#xff0c;具有简洁、易读、功能强大等特点。本文将对 Python 的基础知识进行全面梳理&#xff0c;涵盖从入门必备知识到各类模块和编程概念等内容。 一、Python基础语法 &#xff08;一&#xff09;标识符 定义&#xff1a;用于给变量、函…

7.1.1 计算机网络的组成

文章目录 物理组成功能组成工作方式完整导图 物理组成 计算机网络是将分布在不同地域的计算机组织成系统&#xff0c;便于相互之间资源共享、传递信息。 计算机网络的物理组成包括硬件和软件。硬件中包含主机、前端处理器、连接设备、通信线路。软件中包含协议和应用软件。 功…

领域驱动设计:事件溯源架构简介

概述 事件溯源架构通常由3种应用设计模式组成,分别是:事件驱动(Event Driven),事件溯源(Event Source)、CQRS(读写分离)。这三种应用设计模式常见于领域驱动设计(DDD)中,但它们本身是一种应用设计的思想,不仅仅局限于DDD,每一种模式都可以单独拿出来使用。 E…

【AD】3-10 原理图PDF导出

文件—智能PDF 多页原理图导出 导出设置时选择工程&#xff0c;可自行选择导出一页或多页原理图&#xff0c;一般PCB不用导出

半导体制造工艺(二)光刻工艺—掩模版

在上文中我们已经简单概述了光刻工艺的大致流程。接下来将会介绍在光刻工艺中所需用到的必备材料以及设备。例如掩模版、光刻胶、匀胶机、光刻机等等。由于需要保持讲述工艺的完整性以及流畅&#xff0c;每一个都需要涉及&#xff0c;所以每次仅是侧重点不同。此篇主要讲述的是…

ubuntu服务器安装VASP.6.4.3

ubuntu服务器安装VASP.6.4.3 1 安装Intel OneAPI Base Toolkit和Intel OneAPI HPC Toolkit1.1 更新并安装环境变量1.2 下载Intel OneAPI Base Toolkit和Intel OneAPI HPC Toolkit安装包1.3 安装 Intel OneAPI Base Toolkit1.4 安装 Intel OneAPI HPC Toolkit1.5 添加并激活环境…

Autosar RTE配置-Port Update配置及使用-基于ETAS工具

文章目录 前言Autosar Rte中enableUpdate参数定义ETAS工具中的配置生成代码分析总结前言 在E2E校验中,需要对Counter进行自增,但每个报文周期不一样,导致自增的周期不一样。且Counter应该在收到报文之后才进行自增。基于这些需求,本文介绍使用RTE Port中的参数enableUpdat…

文字滚动效果组件和按钮组件

今天和大家分享一个vue中好用的组件&#xff0c;是我自己写的&#xff0c;大家也可以自己改&#xff0c;就是文字的循环滚动效果&#xff0c;如下图&#xff0c;文字会向左移动&#xff0c;结束之后也会有一个循环&#xff0c;还有一个按钮组件&#xff0c;基本框架写的差不多了…

VMWare虚拟机Ubuntu Desktop怎么共享文件夹

1、虚拟机设置 在菜单"管理"里面找到"虚拟机设置"菜单&#xff0c;然后从"硬件"切换到"选项"&#xff0c;点到"共享文件夹"&#xff0c;然后在右侧选中"总是启用"&#xff0c;然后添加一个共享文件夹。 2、在我的…

JAVA安全—手搓内存马

前言 最近在学这个内存马&#xff0c;就做一个记录&#xff0c;说实话这个内存马还是有点难度的。 什么是内存马 首先什么是内存马呢&#xff0c;顾名思义就是把木马打进内存中。传统的webshell一旦把文件删除就断开连接了&#xff0c;而Java内存马则不同&#xff0c;它将恶…

python力扣2:两数相加

给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都不会以 0 开…

CAN硬件协议详解

一、基本理论&#xff1a; 1、CAN的总线结构&#xff1a; CAN总线 网络结构 有 闭环和开环 两种形式&#xff1b;无论实际的网络多复杂&#xff0c;都离不开这两种基本结构。 闭环结构的CAN总线网络&#xff0c;总线的两端各并联一个120Ω的电阻&#xff0c;两…

解决局域网访问Dify却仅显示nginx页面的问题

为什么dify在本机可以正常访问&#xff0c;局域网通过ip访问却只看到欢迎使用nginx的提示&#xff0c;如果访问服务器ip/apps则直接提示404 Not Found。这是怎么回事该如何解决呢&#xff1f;文章中将一步步解决这些问题。 前言 之前在服务器部署了dify&#xff0c;也在服务器…

【前端】——设置菜单的未读状态

用户会接收消息&#xff0c;接收到消息后&#xff0c;需要把待完成的菜单状态改成未读&#xff08;加上小红点提示&#xff09; 例如菜单目录是这样的&#xff0c;需要完成的内容在页面 /test1 里面&#xff0c;但是不光是需要把子菜单 /test1 标记为未完成&#xff0c;其父菜单…

Linux-ftrace-双nop机制的实现

Linux 内核调试工具ftrace 之&#xff08;NOP动态插桩的实现原理&#xff09; ftrace 是 Linux 内核中的一种跟踪工具&#xff0c;主要用于性能分析、调试和内核代码的执行跟踪。它通过在内核代码的关键点插入探针&#xff08;probe&#xff09;来记录函数调用和执行信息。这对…

火山引擎 DeepSeek R1 API 使用小白教程

一、火山引擎 DeepSeek R1 API 申请 首先需要三个要素&#xff1a; 1&#xff09;API Key 2&#xff09;API 地址 3&#xff09;模型ID 1、首先打开火山引擎的 DeepSeek R1 模型页面 地址&#xff1a;账号登录-火山引擎 2、在页面右下角&#xff0c;找到【推理】按钮&#…