Jorgen's blog Jorgen's blog
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
newland
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

jorgen

Love it, make mistakes, learn, keep grinding.
首页
  • 平台架构
  • 混合式开发记录
  • 推送服务
  • 数据分析
  • 实时调度
  • 架构思想

    • 分布式
  • 编程框架工具

    • 编程语言
    • 框架
    • 开发工具
  • 数据存储与处理

    • 数据库
    • 大数据
  • 消息、缓存与搜索

    • 消息队列
    • 搜索与日志分析
  • 前端与跨端开发

    • 前端技术
    • Android
  • 系统与运维

    • 操作系统
    • 容器化与 DevOps
  • 物联网与安全

    • 通信协议
    • 安全
    • 云平台
newland
  • 关于我
  • 终身学习
  • 关于时间的感悟
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 微信小程序学习记录
  • WebAssembly
  • Vue.js 从入门到实践:构建现代前端应用
    • 前言
    • 为什么选择 Vue.js?
      • 1. 渐进式框架
      • 2. 简单易学
      • 3. 性能优秀
      • 4. 生态系统丰富
    • Vue.js 核心概念
      • 1. 响应式数据
      • 2. 指令
      • 3. 组件系统
    • Vue.js 实战:构建一个待办事项应用
      • 1. 项目初始化
      • 2. 组件设计
      • 3. 实现功能
      • 3.1 状态管理
      • 3.2 添加待办事项
      • 3.3 显示待办事项列表
      • 3.4 单个待办事项
      • 4. 样式美化
    • Vue.js 进阶概念
      • 1. 计算属性和侦听器
      • 2. 生命周期钩子
      • 3. 自定义指令
      • 4. 混入 (Mixins)
    • Vue.js 生态系统
      • 1. Vue Router
      • 2. Vuex
      • 3. Vue CLI
      • 4. Vue Devtools
    • 总结与展望
  • React.js-从入门到精通-构建现代用户界面
  • React-从入门到精通-构建现代Web应用
  • React-从入门到精通-构建现代前端应用
  • React 开发指南:从入门到精通
  • React框架入门:构建现代用户界面
  • TypeScript:为JavaScript添加类型安全
  • TypeScript在前端开发中的应用:从入门到实践
  • Vue.js 集成 TypeScript:构建类型安全的前端应用
  • Webpack从入门到实践:构建现代前端应用
  • 前端工程化:构建现代化开发流程
  • 前端工程化:构建高效、可维护的现代Web应用
  • 前端工程化:构建高效现代Web应用的艺术
  • 响应式设计:构建适配所有设备的现代Web应用
  • 前端状态管理:从Flux到现代解决方案
  • 前端性能优化-打造极速流畅的用户体验
  • 前端测试-构建可靠且高质量的用户界面
  • 前端安全防护-构建安全可靠的Web应用
  • 前端微前端架构-构建可扩展的大型前端应用
  • 前端数据可视化-打造直观易懂的数据呈现
  • 前端国际化-构建面向全球用户的多语言Web应用
  • 前端无障碍访问-构建包容性的Web体验
  • 前端组件化与组件库设计-构建可复用的高质量组件
  • 前端AI与机器学习集成:构建智能化用户界面
  • 前端架构设计模式-构建可扩展的现代Web应用
  • frontend
Jorgen
2023-11-15
目录

Vue.js 从入门到实践:构建现代前端应用

# 前言

作为一名前端开发者,我常常被问到:"应该学习哪个前端框架?" 🤔 这个问题没有标准答案,但 Vue.js 无疑是当今最受欢迎的选择之一。它结合了 React 的灵活性和 Angular 的全面性,同时又保持了简单易学的特点。

在之前的文章中,我们探讨了 WebAssembly 和微信小程序的开发,这些都是前端领域的重要技术。今天,我想和大家一起走进 Vue.js 的世界,看看这个渐进式框架如何帮助我们构建现代化的前端应用。

提示

Vue.js 是一个用于构建用户界面的渐进式 JavaScript 框架。与其他大型框架不同的是,Vue 被设计为可以自底向上逐层应用。

# 为什么选择 Vue.js?

在学习任何新技术之前,了解它的优势总是很有帮助。在我看来,Vue.js 有以下几个吸引人的特点:

# 1. 渐进式框架

Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

# 2. 简单易学

如果你熟悉 HTML、CSS 和 JavaScript,那么学习 Vue.js 会非常轻松。它的 API 设计简洁明了,文档详尽,对新手友好。

# 3. 性能优秀

Vue.js 使用虚拟 DOM 和高效的 diff 算法,确保了出色的性能。同时,它还提供了多种优化手段,如异步组件、路由懒加载等。

# 4. 生态系统丰富

Vue 拥有强大的生态系统,包括 Vue Router(路由管理)、Vuex(状态管理)、Vue CLI(脚手架工具)等,能够满足各种开发需求。

# Vue.js 核心概念

# 1. 响应式数据

Vue.js 的核心特性之一是其响应式系统。当数据发生变化时,视图会自动更新。

<div id="app">
  {{ message }}
</div>

<script>
  var app = new Vue({
    el: '#app',
    data: {
      message: 'Hello Vue!'
    }
  })
</script>
1
2
3
4
5
6
7
8
9
10
11
12

在这个例子中,当 app.message 发生变化时,页面上的文本会自动更新。

# 2. 指令

Vue 提供了多种指令,用于在模板中声明式地绑定底层的数据到 DOM。常见的指令包括:

  • v-if / v-show:条件渲染
  • v-for:列表渲染
  • v-bind:属性绑定(简写 :)
  • v-on:事件监听(简写 @)
  • v-model:双向数据绑定
<div id="app">
  <p v-if="seen">现在你看到我了</p>
  <ol>
    <li v-for="todo in todos" :key="todo.id">
      {{ todo.text }}
    </li>
  </ol>
  <button @click="reverseMessage">反转消息</button>
  <input v-model="message">
</div>
1
2
3
4
5
6
7
8
9
10

# 3. 组件系统

组件是 Vue.js 最强大的功能之一。它们允许你构建可复用的 UI 组件,每个组件都包含自己的 HTML、CSS 和 JavaScript。

// 定义一个名为 button-counter 的新组件
Vue.component('button-counter', {
  data: function() {
    return {
      count: 0
    }
  },
  template: '<button @click="count++">你点击了 {{ count }} 次。</button>'
})
1
2
3
4
5
6
7
8
9

# Vue.js 实战:构建一个待办事项应用

让我们通过一个简单的待办事项应用来实践 Vue.js 的核心概念。

# 1. 项目初始化

首先,我们需要创建一个新的 Vue 项目:

# 全局安装 Vue CLI
npm install -g @vue/cli

# 创建一个新项目
vue create todo-app

# 进入项目目录
cd todo-app

# 启动开发服务器
npm run serve
1
2
3
4
5
6
7
8
9
10
11

# 2. 组件设计

我们的待办事项应用将包含以下组件:

  • App:根组件
  • TodoList:显示待办事项列表
  • TodoItem:单个待办事项项
  • AddTodo:添加新待办事项的表单

# 3. 实现功能

# 3.1 状态管理

在 App.vue 中,我们将管理应用的状态:

<template>
  <div id="app">
    <h1>Vue 待办事项</h1>
    <AddTodo @add-todo="addTodo"/>
    <TodoList :todos="todos" @delete-todo="deleteTodo"/>
  </div>
</template>

<script>
import AddTodo from './components/AddTodo.vue'
import TodoList from './components/TodoList.vue'

export default {
  name: 'App',
  components: {
    AddTodo,
    TodoList
  },
  data() {
    return {
      todos: [
        { id: 1, text: '学习 Vue.js', completed: false },
        { id: 2, text: '构建一个应用', completed: false }
      ]
    }
  },
  methods: {
    addTodo(todo) {
      this.todos = [...this.todos, todo]
    },
    deleteTodo(id) {
      this.todos = this.todos.filter(todo => todo.id !== id)
    }
  }
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

# 3.2 添加待办事项

AddTodo.vue 组件:

<template>
  <div class="add-todo">
    <input 
      type="text" 
      v-model="title" 
      @keyup.enter="addTodo"
      placeholder="添加新的待办事项..."
    >
    <button @click="addTodo">添加</button>
  </div>
</template>

<script>
export default {
  name: 'AddTodo',
  data() {
    return {
      title: ''
    }
  },
  methods: {
    addTodo() {
      if (this.title.trim() === '') return
      
      const todo = {
        id: Date.now(),
        title: this.title,
        completed: false
      }
      
      this.$emit('add-todo', todo)
      this.title = ''
    }
  }
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

# 3.3 显示待办事项列表

TodoList.vue 组件:

<template>
  <div class="todo-list">
    <div v-if="todos.length === 0" class="empty-list">
      没有待办事项,请添加一些!
    </div>
    <div v-else>
      <TodoItem 
        v-for="todo in todos" 
        :key="todo.id" 
        :todo="todo" 
        @delete-todo="$emit('delete-todo', todo.id)"
      />
    </div>
  </div>
</template>

<script>
import TodoItem from './TodoItem.vue'

export default {
  name: 'TodoList',
  components: {
    TodoItem
  },
  props: {
    todos: {
      type: Array,
      required: true
    }
  }
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 3.4 单个待办事项

TodoItem.vue 组件:

<template>
  <div class="todo-item" :class="{ 'completed': todo.completed }">
    <input 
      type="checkbox" 
      :checked="todo.completed" 
      @change="$emit('toggle-completed', todo.id)"
    >
    <span>{{ todo.title }}</span>
    <button @click="$emit('delete-todo', todo.id)" class="delete-btn">删除</button>
  </div>
</template>

<script>
export default {
  name: 'TodoItem',
  props: {
    todo: {
      type: Object,
      required: true
    }
  }
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 4. 样式美化

让我们添加一些 CSS 样式来美化我们的应用:

/* 在 App.vue 或单独的 CSS 文件中 */
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}

.add-todo {
  margin-bottom: 20px;
}

.add-todo input {
  padding: 8px;
  width: 70%;
  border: 1px solid #ddd;
  border-radius: 4px;
}

.add-todo button {
  padding: 8px 16px;
  background-color: #42b983;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}

.todo-list {
  text-align: left;
  max-width: 500px;
  margin: 0 auto;
}

.todo-item {
  display: flex;
  align-items: center;
  padding: 10px;
  border-bottom: 1px solid #eee;
}

.todo-item.completed {
  opacity: 0.6;
}

.todo-item.completed span {
  text-decoration: line-through;
}

.todo-item input {
  margin-right: 10px;
}

.delete-btn {
  margin-left: auto;
  background-color: #ff4757;
  color: white;
  border: none;
  border-radius: 4px;
  padding: 4px 8px;
  cursor: pointer;
}

.empty-list {
  padding: 20px;
  color: #999;
  font-style: italic;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70

# Vue.js 进阶概念

当你掌握了 Vue.js 的基础知识后,可以进一步学习以下高级概念:

# 1. 计算属性和侦听器

计算属性是基于它们的响应式依赖进行缓存的,只有在相关依赖发生改变时才会重新求值。侦听器则用于观察和响应 Vue 实例上的数据变动。

computed: {
  reversedMessage() {
    return this.message.split('').reverse().join('')
  }
},
watch: {
  question(newQuestion, oldQuestion) {
    // 当 question 发生变化时执行某些操作
  }
}
1
2
3
4
5
6
7
8
9
10

# 2. 生命周期钩子

Vue 组件在创建、更新和销毁的过程中会触发一系列生命周期钩子函数,允许我们在这些特定的时间点执行代码。

export default {
  created() {
    // 组件创建后执行
  },
  mounted() {
    // 组件挂载到 DOM 后执行
  },
  updated() {
    // 组件更新后执行
  },
  destroyed() {
    // 组件销毁后执行
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 3. 自定义指令

Vue 允许注册自定义指令,用于对普通 DOM 元素进行底层操作。

// 注册一个全局自定义指令 v-focus
Vue.directive('focus', {
  inserted: function (el) {
    el.focus()
  }
})
1
2
3
4
5
6

# 4. 混入 (Mixins)

混入是一种灵活分发 Vue 组件中可复用功能的方式。混入对象可以包含任意组件选项。

// 定义一个混入对象
var myMixin = {
  created: function () {
    this.hello()
  },
  methods: {
    hello: function () {
      console.log('hello from mixin!')
    }
  }
}

// 定义一个使用混入的组件
var Component = Vue.extend({
  mixins: [myMixin]
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# Vue.js 生态系统

Vue.js 拥有一个强大的生态系统,主要包括:

# 1. Vue Router

Vue Router 是 Vue.js 官方的路由管理器,它与 Vue.js 核心深度集成,让构建单页面应用变得易如反掌。

import Vue from 'vue'
import VueRouter from 'vue-router'
import Home from '../views/Home.vue'

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    name: 'Home',
    component: Home
  },
  {
    path: '/about',
    name: 'About',
    // 路由懒加载
    component: () => import('../views/About.vue')
  }
]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

export default router
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 2. Vuex

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式和库。它采用集中式存储管理应用的所有组件的状态。

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++
    }
  },
  actions: {
    increment({ commit }) {
      commit('increment')
    }
  },
  getters: {
    doubleCount: state => state.count * 2
  }
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 3. Vue CLI

Vue CLI 是一个基于 Vue.js 进行快速开发的完整系统,提供:

  • 通过 @vue/cli 搭建交互式的项目脚手架。
  • 通过 @vue/cli + @vue/cli-service 配置零 Webpack 配置的开发环境。
  • 运行时依赖 (vue, vue-router, vuex) 通常可以通过 npm 或 yarn 直接安装。

# 4. Vue Devtools

Vue Devtools 是一个浏览器扩展,用于调试 Vue 应用。它提供了组件树检查、状态查看、性能分析等功能。

# 总结与展望

Vue.js 以其简单易学、灵活高效的特点,成为了现代前端开发的重要工具。通过本文的介绍,我们了解了 Vue.js 的核心概念、实战应用以及生态系统。

THEOREM

Vue.js 的渐进式特性意味着你可以根据项目需求选择性地使用它的功能,从简单的视图层渲染到复杂的大型单页应用,Vue 都能胜任。

作为一名前端开发者,掌握 Vue.js 无疑会为你的技能库增添重要的一笔。随着 Vue 3 的发布,Vue.js 引入了 Composition API 等新特性,进一步提升了开发体验和性能。

"Vue 不仅仅是一个框架,更是一种构建用户界面的思维方式。" —— 这是我在使用 Vue.js 过程中最深刻的体会。

如果你正在寻找一个既强大又易于学习的前端框架,Vue.js 绝对值得一试。希望这篇文章能够帮助你入门 Vue.js,并在你的项目中应用它来构建出色的用户界面!


参考资料:

  • Vue.js 官方文档 (opens new window)
  • Vue Router 文档 (opens new window)
  • Vuex 文档 (opens new window)
  • Vue CLI 文档 (opens new window)
#Vue.js#前端框架#JavaScript
上次更新: 2026/01/28, 10:42:53
WebAssembly
React.js-从入门到精通-构建现代用户界面

← WebAssembly React.js-从入门到精通-构建现代用户界面→

最近更新
01
LLM
01-30
02
intro
01-30
03
intro
01-30
更多文章>
Theme by Vdoing | Copyright © 2019-2026 Jorgen | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式