指南
基础概要
- 安装
- 介绍
- Vue 实例
- 模板语法
- computed 属性和 watcher
- class 和 style 绑定
- 根据条件进行渲染
- 列表渲染
- 事件处理
- 表单 input 绑定
- 组件基础
过渡 & 动画
- 进入、离开和列表的过渡
深入组件
- 组件注册
- props
- 自定义事件
- slot
- 动态组件和异步组件
- Handling Edge Cases
- 状态间的过渡
可重用 & 合成
- mixin
- 自定义指令
- render 函数 & jsx
- 插件
- 过滤器
工具
- 生产环境部署
- 单文件组件
- 单元测试
- TypeScript 支持
扩展升级
- 路由
- 状态管理
- 服务端渲染
内部原理
- 深入响应式原理
升级迁移
- 从 Vue 1.x 迁移
- 从 Vue Router 0.7.x 迁移
- 从 Vuex 0.6.x 迁移到 1.0
其他更多
- 对比其他框架
- 加入 Vue.js 社区
- 认识团队
介绍
Vue.js 是什么?
Vue.js(读音 /vjuː/,类似于 view 的读音)是一套构建用户界面(user interface)的渐进式框架。与其他重量级框架不同的是,Vue 从根本上采用最小成本、渐进增量(incrementally adoptable)的设计。Vue 的核心库只专注于视图层,并且很容易与其他第三方库或现有项目集成。另一方面,当与单文件组件和 Vue 生态系统支持的库结合使用时,Vue 也完全能够为复杂的单页应用程序提供有力驱动。
如果你想在深入学习 Vue 之前了解更多信息,我们创建了一个视频,完整地梳理了 Vue 的核心理念,以及配合一个示例项目讲解。
如果你是有经验的前端开发人员,想知道 Vue.js 与其它库/框架(library/framework)之间的对比,请查看对比其它框架。
起步
官方指南会预先假定你已具有 HTML、CSS 和 JavaScript 的中级知识水平。如果你刚开始学习前端开发,跳过基础知识,将框架作为你的起步可能不是最好的主意 - 掌握好基础知识再来!之前有其他框架的使用经验,对于学习 Vue.js 会有所帮助,但这不是必需的。
尝试 Vue.js 最简单的方法是使用 JSFiddle Hello World 示例。你可以在浏览器新标签页中打开它,跟着基础示例学习一些基本用法。或者你也可以在本地创建一个 index.html
文件,然后通过如下方式引入 Vue:
<!-- 开发版本,包含有用的控制台警告 --> |
或:
<!-- 生成版本,对于体积和速度进行优化 --> |
查看安装页面来了解安装 Vue 的其他选项。注意:我们不推荐新手从 vue-cli
开始项目,特别是当你对基于 Node.js 的构建工具不够熟悉时。
声明式渲染
Vue.js 的核心是,可以采用简洁的模板语法来声明式的将数据渲染为 DOM:
<div id="app"> |
var app = new Vue({ |
我们已经生成了第一个 Vue 应用程序!这看起来和渲染一个字符串模板非常类似,但是 Vue 在背后做了大量工作。现在数据和 DOM 已经被关联在一起,所有的数据和 DOM 都是响应式的。我们如何对这一切清晰领会?打开你的浏览器的 JavaScript 控制台(现在,就在当前页面打开),然后设置 app.message
的值,你将看到上面的示例所渲染的 DOM 元素会相应地更新。
除了文本插值(text interpolation),我们还可以采用这样的方式绑定 DOM 元素属性:
<div id="app-2"> |
var app2 = new Vue({ |
这里我们遇到一些新内容。你看到的 v-bind
属性被称为指令。指令带有前缀 v-
,表示是由 Vue 提供的专用属性。可能你已经猜到了,它们会在渲染的 DOM 上产生专门的响应式行为。简而言之,这里该指令的作用就是:“将此元素的 title
属性与 Vue 实例的 message
属性保持关联更新”。
如果你再次打开浏览器的 JavaScript 控制台,并输入 app2.message = '一些新的 message'
,就会再次看到,绑定了 title
属性的 HTML 已经进行了更新。
条件与循环
控制切换一个元素的显示也很简单:
<div id="app-3"> |
var app3 = new Vue({ |
继续在控制台输入 app3.seen = false
,你应该会看到 span 消失。
这个示例表明,我们不只是可以将数据绑定到文本和属性,也可以将数据绑定到 DOM 结构。而且,Vue 也提供一个强大的过渡效果系统,可以在 Vue 插入/更新/删除元素时,自动使用过渡效果。
还有其它一些指令,每个都具有各自不同的特殊功能。例如,v-for
指令,可以使用数组中的数据来展示一个项目列表:
<div id="app-4"> |
var app4 = new Vue({ |
- {{ todo.text }}
在控制台,输入 app4.todos.push({ text: '新的 item' })
,你会看到列表中追加了一个新的 item。
处理用户输入
为了让用户和你的应用程序进行交互,我们可以使用 v-on
指令 来增加事件监听器,触发事件后会调用 Vue 实例中 methods 下定义的方法:
<div id="app-5"> |
var app5 = new Vue({ |
{{ message }}
注意,在 reverseMessage
方法中,我们更新了应用程序的状态,而无需触及 DOM - 所有的 DOM 操作都由 Vue 来处理,你所编写的代码只需要关注于底层逻辑。
Vue 还提供了 v-model
指令,使得表单输入和应用程序状态之间的双向绑定变得轻而易举:
<div id="app-6"> |
var app6 = new Vue({ |
{{ message }}
由组件组合而成的应用程序
组件系统是 Vue 的另一个重要概念,因为它是一种抽象,可以让我们使用小型、自成体系和通常可复用的组件,把这些组合来构建大型应用程序。仔细想想,几乎任意类型的应用程序界面,都可以抽象为一个组件树:
在 Vue 中,一个组件本质上是一个被预先定义选项的 Vue 实例,在 Vue 中注册组件很简单:
// 定义一个被命名为 todo-item 的新组件 |
现在你可以在另一个组件模板中组合使用它:
<ol> |
但是这样会将每个 todo 项都为渲染相同的文本,这看起来并不炫酷。我们应该要将数据从父作用域传到子组件。让我们来修改下组件的定义,使它可以接受一个 prop:
Vue.component('todo-item', { |
现在,我们可以使用 v-bind
指令将 todo 传入每个重复的组件中:
<div id="app-7"> |
Vue.component('todo-item', { |
这是一个假想的例子,然而,我们已经努力将应用程序分为两个更小的单位,子组件通过 props 接口,与父组件之间形成了相当合理的解耦。我们现在可以进一步对 <todo-item>
组件进行更复杂的模板配置和逻辑方面的改进,而不会影响到父组件。
在一个大型应用中,有必要将整个应用程序划分为组件,以便开发时可维护管理。在之后的组件指南中我们将深入探讨组件,不过这里有一个(想象中的)使用了组件的应用的模板示例:
<div id="app"> |
与自定义元素的关系
你可能已经注意到,Vue 组件非常类似于 Web 组件规范中的自定义元素(Custom Element)。这是因为 Vue 的组件语法不加限制地效仿参照了此规范。例如 Vue 组件实现了 Slot API 和 is
特殊属性。然而,还是有一些关键区别:
Web 组件规范仍然处于草案阶段,而且尚未被浏览器原生实现。相比之下,Vue 组件不需要任何 polyfill 修补,并且在所有支持的浏览器(IE9 及更高版本)之下表现一致。必要时,Vue 组件也能够包含于原生自定义元素规范之内。
Vue 组件提供了普通自定义元素所不具备的一些重要功能,最突出的是跨组件数据流(cross-component data flow),自定义事件通信(custom event communication)以及构建工具集成(build tool integration)。
准备好了吗?
我们刚才简单介绍了 Vue 核心的最基本功能 — 本指南的其余部分将涵盖剩余功能和其他高级功能的详尽细节,所以请务必完整阅读整个指南!