Vue从入门到精通:前端开发的基石之旅

目录

  • 一、Vue 简介
    • 1.1 渐进式框架的含义
    • 1.2 Vue 在前端开发中的优势
  • 二、Vue 环境搭建
    • 2.1 安装 Node.js 和 npm
    • 2.2 全局安装 Vue CLI
    • 2.3 使用 Vue CLI 创建 Vue 项目
  • 三、Vue 基础语法
    • 3.1 数据绑定
      • 3.1.1 插值语法
      • 3.1.2 指令语法
    • 3.2 计算属性和侦听器
      • 3.2.1 计算属性
      • 3.2.2 侦听器
    • 3.3 条件渲染与列表渲染
      • 3.3.1 v-if、v-else-if、v-else
      • 3.3.2 v-show
  • 四、Vue 组件化开发
    • 4.1 组件的基本概念
    • 4.2 组件的定义与注册
    • 4.3 组件间通信
      • 4.3.1 props 传值
      • 4.3.2 自定义事件
      • 4.3.3 事件总线
  • 五、Vue 的生命周期
    • 5.1 生命周期的概念
    • 5.2 生命周期钩子函数
      • 5.2.1 创建阶段
      • 5.2.2 挂载阶段
      • 5.2.3 更新阶段
      • 5.2.4 销毁阶段
  • 六、Vue 常用指令详解
    • 6.1 v-html 指令
    • 6.2 v-on 指令
    • 6.3 v-bind 指令
  • 七、总结与展望


一、Vue 简介

Vue 是一套用于构建用户界面的渐进式 JavaScript 框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或已有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

1.1 渐进式框架的含义

“渐进式” 意味着 Vue 可以根据项目的需求,逐步引入其功能。开发者可以从一个非常轻量、简洁的基础开始,随着项目的增长,根据实际需要不断引入更多的组件和功能。例如,在一个简单的小型项目中,可能只需要使用 Vue 的基本数据绑定和指令系统;而在构建复杂的大型单页应用时,则可以引入 Vue Router 进行路由管理、Vuex 进行状态管理等。Vue 不会强迫开发者一开始就使用其所有功能,这种灵活性使得项目的起点低、上手快,同时也方便项目在不同阶段进行扩展和升级。

1.2 Vue 在前端开发中的优势

  • 轻量级:Vue.js 的核心库非常小,压缩后只有几十 KB,加载速度快,运行效率高。这使得它在网络性能有限的情况下,也能快速加载和运行,为用户提供流畅的体验。
  • 易于上手:Vue 的语法简洁明了,类似于 HTML 和 JavaScript 的组合,对于有一定前端基础的开发者来说,很容易理解和使用。同时,Vue 提供了详细且易懂的官方文档,涵盖了从基础到高级的所有知识点,并配有大量示例代码,帮助开发者快速入门。
  • 组件化开发:组件是 Vue.js 的核心功能之一,可以将应用程序分割成可重用的自定义组件。每个组件都拥有自己的逻辑、样式和模板,使代码更易于维护和复用。例如,在一个电商网站中,可以将产品列表、购物车、用户评论等功能分别封装成不同的组件,这样不仅代码结构清晰,还可以分别对这些功能进行独立测试和维护。
  • 生态丰富:Vue 拥有一个庞大且活跃的社区,提供了丰富的官方库和大量的第三方插件、工具和模板,帮助开发者高效开发。比如 Vue Router 用于管理单页应用的路由,Vuex 用于管理应用的全局状态,Vue CLI 用于快速搭建 Vue 项目等。此外,还有像 Element UI、Vuetify 等 UI 组件库,可以帮助开发者快速构建美观的用户界面。
  • 灵活性:Vue 既可以作为简单的视图层库,嵌入到现有的 HTML 页面中,增强页面的交互性;也可以通过引入各种插件和工具,扩展为功能强大的前端框架,用于构建复杂的单页应用。它可以与其他库或已有项目无缝集成,开发者可以根据需求选择使用 Vue 的部分功能或全部功能。
  • 响应式数据绑定:Vue 提供了双向数据绑定,使得数据和视图始终保持同步,简化了数据更新和界面渲染的流程。当数据发生变化时,相关的视图会自动更新,无需手动操作 DOM;反之,当用户在视图上进行操作导致数据变化时,数据也会实时更新,这种特性大大提高了开发效率和用户体验。

二、Vue 环境搭建

在开始使用 Vue 进行项目开发之前,需要先搭建好 Vue 的开发环境。这主要包括安装 Node.js 和 npm,以及使用 npm 全局安装 Vue CLI。下面将详细介绍这些步骤。

2.1 安装 Node.js 和 npm

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,它允许在服务端运行 JavaScript。Vue CLI 依赖于 Node.js,因此必须首先安装 Node.js ,而 npm(Node Package Manager)是 Node.js 的包管理器,用于安装、管理和发布 JavaScript 包,它会随 Node.js 一起安装。以下是安装步骤:

  1. 下载:访问 Node.js 官网(https://nodejs.org/ ),在官网首页可以看到推荐的两个版本,LTS(长期支持版)适合稳定的生产环境,Current(最新版)包含最新的特性。根据自己的需求选择对应的操作系统安装包进行下载,如 Windows 系统可选择 Windows 安装包(.msi)-64 位。如果需要下载历史版本,则点击【其他下载】,滑到底下,点【以往的版本】找到想要的版本下载。
  2. 安装:以 Windows 系统为例,下载完成后,双击.msi 文件开始安装。安装过程中,大部分步骤可以直接点击 “Next” 下一步,安装路径可以自行选择,也可以使用默认路径。安装程序会自动将 Node.js 添加到系统环境变量中。在安装过程中,可能会出现一个勾选选项 “Automatically install the necessary tools. Note that this will also install Chocolatey.”,意思是自动安装必要的工具,注意这也将安装 Chocolatey,Chocolatey 是一个 Windows 环境下的软件包管理工具,根据个人需求选择是否勾选 ,简单使用的话不勾选也可以。
  3. 检查版本:安装完成后,按下 Win+R 键,输入 “cmd” 打开命令提示符,在命令行中输入 “node -v” 和 “npm -v”,如果分别显示出 Node.js 和 npm 的版本号,如 “v18.16.0”“9.5.1”,则说明安装成功。

2.2 全局安装 Vue CLI

Vue CLI 是 Vue.js 官方提供的脚手架工具,它可以帮助开发者快速搭建 Vue 项目,减少重复性工作。通过 Vue CLI,可以快速创建项目结构、安装依赖和配置开发环境,并选择不同的模板和配置选项,以满足不同开发需求。此外,Vue CLI 还提供了热重载等开发工具,极大地提高了开发效率。在安装完 Node.js 和 npm 后,可以使用 npm 全局安装 Vue CLI,步骤如下:

  1. 打开命令行工具:在 Windows 系统中,可以使用 “命令提示符” 或 “PowerShell”;在 Mac 和 Linux 系统中,可以使用 “终端”。
  2. 执行安装命令:在命令行中输入 “npm install -g @vue/cli”,“-g” 表示全局安装,该命令会从 npm 仓库下载 Vue CLI 并安装到全局环境中。安装过程中,命令行界面会显示安装进度和相关信息,如果网络正常,等待安装完成即可。安装过程可能会因为网络状况或其他原因出现问题,如果安装失败,可以尝试更换网络或重新执行安装命令,也可以查阅相关错误信息解决问题。
  3. 确认安装成功:安装完成后,在命令行中输入 “vue --version”,如果显示出 Vue CLI 的版本号,如 “5.0.8”,则说明安装成功。也可以输入 “vue” 命令,查看 Vue CLI 的帮助信息,进一步确认安装是否正确,若能正常显示帮助信息,表明 Vue CLI 已正确安装并可使用。

2.3 使用 Vue CLI 创建 Vue 项目

安装好 Vue CLI 后,就可以使用它来创建 Vue 项目了。以下是创建 Vue 项目的具体步骤:

  1. 创建项目:打开命令行工具,进入你希望创建项目的目录,例如要在 “D:\projects” 目录下创建项目,先在命令行中输入 “d:” 切换到 D 盘,再输入 “cd projects” 进入 “projects” 目录。然后执行命令 “vue create my - vue - project”,“my - vue - project” 是项目名称,你可以根据实际需求自定义。
  2. 选择配置:执行上述命令后,Vue CLI 会提供一个交互式的界面,让你选择项目的配置。有两种方式:
    • 默认配置:如果对 Vue 开发还不太熟悉,或者希望快速创建一个基础项目,可以直接选择默认配置,按回车键即可。默认配置会使用推荐的设置,包括安装 Babel(用于将 ES6 + 代码转换为浏览器能识别的 ES5 代码)、ESLint(用于检查和规范代码风格)等基本工具。
    • 手动配置:如果有特定的需求,比如需要使用 Vue Router 进行路由管理、Vuex 进行状态管理,或者需要自定义其他特性,可以选择 “Manually select features” 手动选择特性。通过键盘上下键移动光标,空格键选择或取消选择,回车键确认选择。例如,使用空格键勾选 “Router”“Vuex” 等选项,然后按回车键继续。选择完特性后,还会有一些关于这些特性的详细配置选项,如选择路由模式(hash 或 history)等,根据项目需求进行选择即可。
  3. 进入项目目录:项目创建完成后,在命令行中输入 “cd my - vue - project”,进入项目目录。此时,项目目录下会生成一系列文件和文件夹,包含项目的基本结构和配置文件。其中,“node_modules” 文件夹用于存放项目的依赖包;“public” 文件夹用于存放静态资源文件,如 “index.html” 是项目的入口 HTML 文件;“src” 文件夹是项目的主要源代码目录,里面包含 “assets”(存放静态资源,如图片等)、“components”(存放组件文件)、“App.vue”(应用的根组件)、“main.js”(应用的入口文件)等。
  4. 启动开发服务器:在项目目录下,执行命令 “npm run serve”,该命令会启动一个开发服务器,默认监听 8080 端口。命令执行后,命令行界面会显示编译信息和服务器地址,如 “INFO Listening at http://localhost:8080 ”。此时,打开浏览器,访问 “http://localhost:8080”,就可以看到 Vue 项目的初始页面了。在开发过程中,当修改项目源代码时,开发服务器会自动检测到更改并重新编译,浏览器页面也会实时更新,这就是 Vue CLI 提供的热重载功能,大大提高了开发效率。

三、Vue 基础语法

3.1 数据绑定

数据绑定是 Vue.js 的核心功能之一,它使得数据与 DOM 之间建立了一种响应式的联系,即当数据发生变化时,DOM 会自动更新;反之,当用户在 DOM 上进行操作导致数据变化时,数据也会实时更新。Vue 提供了两种主要的数据绑定方式:插值语法和指令语法。

3.1.1 插值语法

插值语法使用双大括号 {{}} 来将数据渲染到 HTML 页面中。双大括号中的内容是一个 JavaScript 表达式,它会被解析并计算出结果,然后将结果渲染到对应的 DOM 位置上。例如:

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>Vue插值语法示例</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>
    <div id="app">
        <!-- 文本插值,显示message数据属性的值 -->
        <p>{{ message }}</p>
        <!-- 调用对象方法,将name属性值转换为大写后显示 -->
        <p>{{ name.toUpperCase() }}</p>
        <!-- 进行数学运算并显示结果 -->
        <p>{{ 2 + 3 }}</p>
        <!-- 使用三目运算符根据条件显示不同内容 -->
        <p>{{ isShow ? '显示内容' : '不显示内容' }}</p>
    </div>
    <script>
        new Vue({
            el: '#app',
            data: {
                message: 'Hello, Vue!',
                name: 'John',
                isShow: true
            }
        });
    </script>
</body>

</html>

在上述示例中,{{ message }} 会将 Vue 实例中 message 数据属性的值渲染到

标签内;{{ name.toUpperCase() }} 会调用 name 属性的 toUpperCase 方法,将其值转换为大写后再渲染;{{ 2 + 3 }} 进行了简单的数学运算并显示结果;{{ isShow ? ‘显示内容’ : ‘不显示内容’ }} 使用三目运算符根据 isShow 的值来决定显示的内容。

除了文本插值,插值语法还可以用于 HTML 属性绑定,但需要注意的是,直接在 HTML 属性中使用插值语法时,有些属性可能无法正常工作,此时可以使用 v-bind 指令来替代。例如:

<div id="app">
    <!-- 错误示例,src属性无法识别插值语法 -->
    <img src="{{ imageUrl }}" alt="图片">
    <!-- 正确示例,使用v-bind指令绑定src属性 -->
    <img v-bind:src="imageUrl" alt="图片">
</div>
<script>
    new Vue({
        el: '#app',
        data: {
            imageUrl: 'https://example.com/image.jpg'
        }
    });
</script>

3.1.2 指令语法

指令是带有 v- 前缀的特殊属性,它们可以在 DOM 元素上添加特殊的行为。Vue 提供了许多内置指令,如 v-bind、v-model、v-on 等,这些指令可以帮助我们实现数据绑定、表单输入处理、事件监听等功能。

  • v-bind 指令:用于动态绑定 HTML 元素的属性,它可以将 Vue 实例中的数据与 HTML 元素的属性进行绑定,实现单向数据绑定。当数据发生变化时,对应的 HTML 属性也会随之更新。v-bind 的完整语法是 v-bind:属性名=“表达式”,也可以使用简写形式 :属性名=“表达式”。例如:
<div id="app">
    <!-- 绑定class属性,根据isActive的值决定是否添加active类 -->
    <div v-bind:class="{ active: isActive }">这是一个div</div>
    <!-- 简写形式 -->
    <div :class="{ active: isActive }">这是另一个div</div>
    <!-- 绑定style属性,动态设置字体大小 -->
    <p v-bind:style="{ fontSize: fontSize + 'px' }">这是一段文字</p>
    <!-- 简写形式 -->
    <p :style="{ fontSize: fontSize + 'px' }">这是另一段文字</p>
</div>
<script>
    new Vue({
        el: '#app',
        data: {
            isActive: true,
            fontSize: 16
        }
    });
</script>

在上述示例中,第一个

通过 v-bind:class 绑定了一个对象,根据 isActive 的布尔值来决定是否添加 active 类;第二个
使用了简写形式 。

标签通过 v-bind:style 动态设置了 fontSize 样式属性,同样也展示了完整写法和简写形式。

  • v-model 指令:主要用于表单元素,实现双向数据绑定。它会自动监听表单元素的输入事件,并将输入的值同步到 Vue 实例的数据中;反之,当数据发生变化时,表单元素的值也会相应更新。v-model 支持多种表单元素,如