Vue.js 自 2014 年发布以来,已经成为前端开发领域最受欢迎的框架之一。它由尤雨溪(Evan You)创建,设计理念是"渐进式框架"——你可以只用它的一小部分功能,也可以用它构建复杂的单页应用。
在众多前端框架中,Vue 以其平缓的学习曲线和灵活的设计脱颖而出。不同于 Angular 的"大而全"和 React 的"库而非框架"理念,Vue 找到了一个平衡点:既提供了完整的开发体验,又不会强制你接受所有的设计决策。
"渐进式"这个词经常被提及,但很多人并不真正理解它的含义。简单来说:
第一步:你可以像使用 jQuery 一样,在现有页面中引入 Vue,只用它的响应式数据绑定功能。
第二步:当项目变复杂时,可以使用组件化开发,将页面拆分成可复用的模块。
第三步:需要路由?加上 Vue Router。需要状态管理?加上 Vuex。
第四步:最终,你可以使用 Vue CLI 构建完整的工程化项目。
这种设计让你可以根据项目需求选择合适的复杂度,而不是一开始就被迫接受整套方案。
最基础的用法是将数据绑定到 DOM:
<div id="app">
{{ message }}
</div>
<script>
new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
</script>
当 message 改变时,页面会自动更新,你不需要手动操作 DOM。
控制元素的显示和列表渲染:
<div id="app">
<p v-if="seen">现在你看到我了</p>
<ul>
<li v-for="item in items">{{ item.text }}</li>
</ul>
</div>
响应用户的交互:
<div id="app">
<input v-model="message">
<button v-on:click="reverseMessage">反转消息</button>
<p>{{ message }}</p>
</div>
<script>
new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
},
methods: {
reverseMessage: function() {
this.message = this.message.split('').reverse().join('')
}
}
})
</script>
将界面拆分成独立的、可复用的组件:
Vue.component('todo-item', {
props: ['todo'],
template: '<li>{{ todo.text }}</li>'
})
Vue 的响应式系统是其核心特性之一。当你把一个普通 JavaScript 对象传给 Vue 实例的 data 选项,Vue 会遍历这个对象的所有属性,并使用 Object.defineProperty 把它们转换为 getter/setter。
var vm = new Vue({
data: {
a: 1
}
})
vm.a = 2 // 触发 setter,视图自动更新
这个过程对开发者是透明的,你只需要修改数据,Vue 会自动处理 DOM 更新。
组件是 Vue 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue 编译器为它添加特殊功能。
Vue 使用虚拟 DOM 来提高渲染效率。当数据变化时,Vue 会先在内存中创建一个虚拟 DOM 树,然后与旧树进行比较,找出最小的变更,最后只更新需要变化的部分。
这套教程面向:
按照本教程的顺序,你将逐步掌握: