Vue 2 入门:从零开始学习前端框架 – wiki词典

Vue 2 入门:从零开始学习前端框架

随着现代 Web 应用的日益复杂,前端框架成为了开发不可或缺的工具。其中,Vue.js 以其渐进式、易学易用和高性能的特点,受到了广大开发者的青睐。本文将带领完全没有 Vue.js 基础的你,从零开始,逐步掌握 Vue 2 的核心概念和开发实践。

导言:为什么选择 Vue 2?

Vue.js (通常简称为 Vue) 是一个用于构建用户界面的渐进式框架。与大型框架如 Angular 不同,Vue 被设计为可以自底向上逐层应用。这意味着你可以将 Vue 用作小型交互组件的库,也可以构建大型的单页应用 (SPA)。

在 Vue 2 的生态系统中,有着成熟的工具链、丰富的文档和活跃的社区。虽然 Vue 3 已发布,但 Vue 2 仍然在许多现有项目和公司中广泛使用,理解其核心原理对于前端开发者来说至关重要。

Vue 2 的主要优势包括:

  1. 易学易用: 简洁的 API 和清晰的文档,让你能够快速上手。
  2. 渐进式: 可以逐步引入 Vue 到现有项目,按需使用。
  3. 高性能: 虚拟 DOM 和优化机制保证了渲染效率。
  4. 组件化: 模块化的开发方式,提高代码复用性和可维护性。
  5. 丰富的生态: 拥有 Vue Router、Vuex、Vue CLI 等官方工具,覆盖了开发过程的方方面面。

第一部分:准备工作

在开始编写代码之前,我们需要搭建一个基础的开发环境。

  1. Node.js 和 npm/yarn 安装:
    Vue 的很多开发工具都依赖于 Node.js。请访问 Node.js 官网 (nodejs.org) 下载并安装最新稳定版。安装 Node.js 会同时安装 npm (Node Package Manager)。你也可以选择安装更快的包管理器 yarn (npm install -g yarn)。

  2. 代码编辑器:
    强烈推荐使用 Visual Studio Code (VS Code),它拥有强大的扩展生态,例如 Vetur (对 Vue 文件提供语法高亮、智能提示等支持)。

  3. 浏览器:
    推荐使用 Chrome 或 Firefox,并安装 Vue Devtools 浏览器扩展。这对于调试 Vue 应用至关重要。

第二部分:你的第一个 Vue 2 应用

我们先从最简单的方式开始——通过 CDN 引入 Vue,无需复杂的构建配置。

创建一个 index.html 文件:

“`html






我的第一个 Vue 应用



{{ message }}

现在你看到了我

计算属性:{{ reversedMessage }}

待办事项列表

  • {{ todo.text }}

你输入了: {{ newMessage }}



“`

打开 index.html,你将看到一个由 Vue 驱动的简单页面。让我们分解一下其中的关键概念:

  • Vue 实例 (new Vue()):
    每个 Vue 应用都是通过创建一个新的 Vue 实例来启动的。它接收一个选项对象,其中包含数据、模板、挂载元素等配置。

    • el: '#app':指定 Vue 实例将挂载到的 DOM 元素。
    • data:一个对象,Vue 会将其属性转换为响应式数据。当这些数据发生变化时,视图会自动更新。
    • methods:定义属于 Vue 实例的方法,通常用于响应用户交互或执行业务逻辑。
    • computed计算属性。它们是基于 data 中现有响应式数据计算而来的属性。与 methods 相比,计算属性会缓存其结果,只在其依赖的响应式数据发生变化时才重新计算,因此性能更优。
    • watch侦听器。当你需要在某个数据变化时执行一些异步或开销较大的操作时,可以使用侦听器。它会“侦听”一个数据属性的变化,并在变化时执行回调函数。
  • 模板语法:

    • 数据绑定 ({{ }}): 双大括号语法用于将 data 中的数据插入到 HTML 模板中。当 data.message 变化时,<h1> 标签的内容会自动更新。
    • 指令 (v-): Vue 提供了许多内置指令,以 v- 开头,用于在 HTML 元素上应用特殊的行为。
      • v-if="seen":根据 seen 的布尔值来条件性地渲染元素。
      • v-for="todo in todos":循环渲染列表。:key="todo.id" 是重要的,它帮助 Vue 追踪每个列表项的身份,从而优化渲染性能。
      • v-on:click="reverseMessage" (简写 @click="reverseMessage"):监听 DOM 事件,当点击按钮时调用 reverseMessage 方法。
      • v-bind:href="url" (简写 :href="url"):用于动态绑定 HTML 属性。
      • v-model:实现表单输入和应用状态之间的双向绑定,常用于 <input><textarea><select> 等表单元素。

第三部分:组件化

组件是 Vue 应用的核心。它们是可复用的 Vue 实例,带有预定义的模板、脚本和样式。组件化让应用开发更模块化、更易于管理。

在上面的 index.html 中,我们可以在 Vue 实例外部定义一个全局组件:

“`html

<div id="app">
    <!-- ... 之前的内容 ... -->
    <my-component></my-component>
</div>

<script>
    // 定义一个全局组件
    Vue.component('my-component', {
        template: '<div>这是一个自定义组件!<button @click="count++">点击了 {{ count }} 次</button></div>',
        data: function () { // 组件的 data 必须是一个函数,返回一个对象
            return {
                count: 0
            }
        }
    });

    var app = new Vue({
        el: '#app',
        data: { /* ... */ },
        methods: { /* ... */ },
        computed: { /* ... */ }
    });
</script>



“`

组件通信 (Props 和 Events):

组件通常需要相互通信。
* 父组件向子组件传递数据: 使用 props
* 子组件向父组件发送消息: 使用自定义事件 ($emit)。

创建一个 components.html 示例:

“`html






Vue 组件通信


父组件计数器: {{ parentCount }}




“`

第四部分:Vue CLI (推荐用于大型项目)

对于更复杂的单页应用,手动管理依赖、编译和热重载会变得非常繁琐。Vue CLI 是官方提供的脚手架工具,可以帮助我们快速搭建一个生产级别的 Vue 项目。

  1. 安装 Vue CLI:
    bash
    npm install -g @vue/cli
    # 或者
    yarn global add @vue/cli

  2. 创建一个新项目:
    bash
    vue create my-vue-app

    CLI 会提示你选择预设 (如 Vue 2 或 Vue 3,以及 Babel、ESLint、Router、Vuex 等配置)。选择 Vue 2 默认预设或手动选择你需要的特性。

  3. 运行项目:
    进入项目目录并启动开发服务器:
    bash
    cd my-vue-app
    npm run serve
    # 或者
    yarn serve

    你的应用通常会在 http://localhost:8080/ 运行。

项目结构简介 (Vue CLI 生成):

my-vue-app/
├── public/ // 静态资源目录,打包时会直接复制
│ └── index.html // 应用的入口 HTML 文件
├── src/ // 源代码目录
│ ├── assets/ // 存放静态资源,如图片、字体
│ ├── components/ // 存放可复用组件
│ ├── App.vue // 根组件
│ └── main.js // 应用的入口 JavaScript 文件
├── .gitignore // Git 忽略文件
├── babel.config.js // Babel 配置文件
├── package.json // 项目配置和依赖
├── README.md // 项目说明
└── vue.config.js (可选) // Vue CLI 配置文件,用于自定义构建行为

src/main.js 中,你会看到如何引入 App.vue 根组件并挂载到 #app 元素上:

“`javascript
// src/main.js
import Vue from ‘vue’
import App from ‘./App.vue’

Vue.config.productionTip = false

new Vue({
render: h => h(App), // 使用渲染函数将 App 组件渲染到页面
}).$mount(‘#app’) // 挂载到 public/index.html 中的

“`

App.vuesrc/components/ 下的 .vue 文件是 单文件组件 (Single-File Components, SFC)。它们将组件的模板 (<template>)、脚本 (<script>) 和样式 (<style>) 封装在一个文件中,极大地提高了开发效率和模块化程度。

第五部分:生命周期钩子

每个 Vue 实例在创建时都会经历一系列初始化步骤,例如设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM。同时,它也会运行一些叫做生命周期钩子函数,让我们可以在实例生命周期的不同阶段执行代码。

常用的生命周期钩子:

  • beforeCreate:实例刚在内存中创建,数据观测 (data observation) 和事件机制都未初始化。
  • created:实例创建完成,数据观测、属性和方法的运算、事件回调都已经配置完成。但 $el 属性 (即 DOM 元素) 还没生成。你可以在这里进行数据请求。
  • beforeMount:模板编译/挂载之前。
  • mounted:实例已经挂载到 DOM 上,$el 可用。你可以在这里访问 DOM。
  • beforeUpdate:响应式数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。
  • updated:虚拟 DOM 重新渲染和打补丁之后调用。
  • beforeDestroy:实例销毁之前调用。在这里可以做一些清理工作,如清除定时器、解除事件监听。
  • destroyed:实例销毁之后调用。

javascript
new Vue({
el: '#app',
data: {
message: 'Hello'
},
beforeCreate: function () {
console.log('beforeCreate: ' + this.message); // undefined
},
created: function () {
console.log('created: ' + this.message); // Hello
// 可以在这里发起异步请求,因为数据和方法已可用
},
mounted: function () {
console.log('mounted: DOM 已经挂载');
// 可以在这里操作 DOM 元素
},
updated: function () {
console.log('updated: DOM 已经更新');
}
});

第六部分:Vue Router (构建单页应用)

对于单页应用 (SPA),我们需要在不重新加载页面的情况下,根据 URL 渲染不同的视图。Vue Router 是 Vue.js 官方的路由管理器。

  1. 安装 Vue Router:
    如果使用 Vue CLI,可以在创建项目时选择集成 Vue Router。如果手动添加,则:
    bash
    npm install [email protected] # Vue 2 对应 Vue Router 3.x
    # 或者
    yarn add [email protected]

  2. 配置路由:
    通常在 src/router/index.js (或类似文件) 中配置:

    “`javascript
    // src/router/index.js
    import Vue from ‘vue’
    import VueRouter from ‘vue-router’
    import Home from ‘../views/Home.vue’ // 假设 Home.vue 是你的一个视图组件
    import About from ‘../views/About.vue’

    Vue.use(VueRouter) // 插件化安装

    const routes = [
    { path: ‘/’, name: ‘Home’, component: Home },
    { path: ‘/about’, name: ‘About’, component: About }
    ]

    const router = new VueRouter({
    mode: ‘history’, // 或 ‘hash’ (默认)
    routes
    })

    export default router
    “`

  3. main.js 中引入并使用:

    “`javascript
    // src/main.js
    import Vue from ‘vue’
    import App from ‘./App.vue’
    import router from ‘./router’ // 引入路由配置

    new Vue({
    router, // 将 router 实例注入到 Vue 实例中
    render: h => h(App)
    }).$mount(‘#app’)
    “`

  4. 在组件中使用路由:
    在你的模板中,使用 <router-link> 进行导航,使用 <router-view> 显示当前路由匹配到的组件。

    html
    <!-- App.vue -->
    <template>
    <div id="app">
    <nav>
    <router-link to="/">首页</router-link> |
    <router-link to="/about">关于</router-link>
    </nav>
    <router-view/> <!-- 路由匹配到的组件将在此处渲染 -->
    </div>
    </template>

第七部分:Vuex (状态管理)

随着应用规模的增长,多个组件共享和管理状态会变得复杂。Vuex 是 Vue.js 官方提供的集中式状态管理模式。它充当所有组件的集中存储,并遵循一套规则来确保状态以可预测的方式发生变化。

核心概念:

  • State (状态): 存储应用的所有状态数据,是唯一的“真实来源”。
  • Getters (获取器): 类似于 Vue 组件的计算属性,用于从 State 中派生出一些状态。
  • Mutations (变更): 唯一允许修改 State 的方式,必须是同步函数。
  • Actions (动作): 提交 Mutations,可以包含任意异步操作。
  • Modules (模块): 当 State 变得庞大时,可以将 Store 分割成模块。

  • 安装 Vuex:
    如果使用 Vue CLI,可以在创建项目时选择集成 Vuex。如果手动添加,则:
    bash
    npm install [email protected] # Vue 2 对应 Vuex 3.x
    # 或者
    yarn add [email protected]

  • 创建 Store:
    通常在 src/store/index.js (或类似文件) 中配置:

    “`javascript
    // src/store/index.js
    import Vue from ‘vue’
    import Vuex from ‘vuex’

    Vue.use(Vuex)

    export default new Vuex.Store({
    state: {
    count: 0 // 你的应用状态
    },
    getters: {
    doubleCount: state => state.count * 2
    },
    mutations: {
    // 增加 count 的 Mutation
    increment (state) {
    state.count++
    },
    // 传入载荷 (payload) 的 Mutation
    add (state, payload) {
    state.count += payload.amount
    }
    },
    actions: {
    // 提交 increment Mutation 的 Action
    incrementAsync ({ commit }) {
    setTimeout(() => {
    commit(‘increment’)
    }, 1000)
    }
    },
    modules: {
    // 可以将 store 分割成模块
    }
    })
    “`

  • main.js 中引入并使用:

    “`javascript
    // src/main.js
    import Vue from ‘vue’
    import App from ‘./App.vue’
    import store from ‘./store’ // 引入 store 配置

    new Vue({
    store, // 将 store 实例注入到 Vue 实例中
    render: h => h(App)
    }).$mount(‘#app’)
    “`

  • 在组件中使用 Vuex:

    “`html


    “`

总结与学习路径建议

恭喜你,现在你已经掌握了 Vue 2 的核心概念和基本用法!从最基础的数据绑定到复杂的组件通信、路由和状态管理,你已经迈出了成为一名 Vue 开发者的坚实一步。

接下来的学习路径建议:

  1. 深入学习官方文档: Vue.js 官方文档是最好的学习资源,仔细阅读每个章节。
  2. 实践项目: 尝试构建一些小项目,例如待办事项列表、简易计算器、天气应用等,将所学知识付诸实践。
  3. 学习高级特性: 深入了解渲染函数、自定义指令、插件开发、服务端渲染 (SSR) 等。
  4. 掌握工具链: 熟练使用 Vue Devtools 进行调试,学习 Webpack 配置 (Vue CLI 已经封装得很好,但理解其工作原理很有用)。
  5. 关注生态系统: 了解 Element UI、Ant Design Vue 等 UI 组件库,以及 Axios 等 HTTP 请求库。
  6. 了解 Vue 3: 随着 Vue 3 的普及,逐渐学习其 Composition API、Proxy 响应式系统等新特性,为未来的项目做准备。

Vue 2 是一个强大而灵活的框架。通过不断地学习和实践,你将能够利用它构建出高效、美观且易于维护的现代前端应用。祝你在前端开发的道路上越走越远!

滚动至顶部