898aa43c25d7dc7efef9d5572d8c726b.pngVue.js 是什么

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

如果你想在深入学习 Vue 之前对它有更多了解,我们制作了一个视频,带您了解其核心概念和一个示例工程。

如果你已经是有经验的前端开发者,想知道 Vue 与其它库/框架有哪些区别,请查看对比其它框架。

学Vue.js之前需要具备什么基础?

在学习vue.js之前你需要学会或者了解 HTML、CSS 和 JavaScript 的中级知识。如果你刚开始学习前端开发,准备将框架作为你的第一步可能不是最好的主意——需要掌握好基础知识再来哦!如果你之前有其它框架的使用经验会对你的学习有所帮助,但这不是必需的。

安装Vue.js

尝试 Vue.js 最简单的方法是使用 Hello World 例子。你可以在浏览器新标签页中打开它,跟着例子学习一些基础用法。或者你也可以创建一个 .html 文件,然后通过如下方式引入 Vue:

d4e4165cee537413014857f647fff23a.png

或者:

c6c092ced5016d91f793b7aa8973ead9.png

不过我还是不推荐新手直接使用 vue-cli,尤其是在你还不熟悉基于 Node.js 的构建工具时。

声明式渲染

Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统:
html代码:

2e99eb6b558f6f54e6ceea89181393a1.png

js代码:

60a60a0da3b3f8585cb71191f42ebdc5.png

运行结果:

6a3d1c8c2f7d0ae0838992e910c6a3e8.png

现在我们已经成功创建了第一个 Vue 应用!看起来这跟渲染一个字符串模板非常类似,但是 Vue 在背后做了大量工作。现在数据和 DOM 已经被建立了关联,所有东西都是响应式的。我们要怎么确认呢?打开你的浏览器的 JavaScript 控制台 (就在这个页面打开),并修改 app.message 的值,你将看到上例相应地更新。

注意我们不再和 HTML 直接交互了。一个 Vue 应用会将其挂载到一个 DOM 元素上 (对于这个例子是 #app) 然后对其进行完全控制。那个 HTML 是我们的入口,但其余都会发生在新创建的 Vue 实例内部。

除了文本插值,我们还可以像这样来绑定元素 attribute:

77eacd66597c9228f38ede3955e8b58c.png

6eae22f40584d3d893a8b62a6a06f934.png

运行结果:

951bd4b8858b4c5983ccc1346bc11fb8.png

这里我们遇到了一点新东西。你看到的 v-bind attribute 被称为指令。指令带有前缀 v-,以表示它们是 Vue 提供的特殊 attribute。可能你已经猜到了,它们会在渲染的 DOM 上应用特殊的响应式行为。在这里,该指令的意思是:“将这个元素节点的 title attribute 和 Vue 实例的 message property 保持一致”。

如果你再次打开浏览器的 JavaScript 控制台,输入 app2.message = '新消息',就会再一次看到这个绑定了 title attribute 的 HTML 已经进行了更新。

条件与循环

控制切换一个元素是否显示也相当简单:

html代码:facee57a7fa71f728de6884a83db89de.png

js代码:

a92a43ac1a29548791edff3eacaf339f.png

运行结果:

ed8fb0c40c54c87eda3e1da7af3d0749.png

继续在控制台输入 app3.seen = false,你会发现之前显示的消息消失了。

这个例子演示了我们不仅可以把数据绑定到 DOM 文本或 attribute,还可以绑定到 DOM 结构。此外,Vue 也提供一个强大的过渡效果系统,可以在 Vue 插入/更新/移除元素时自动应用过渡效果。

还有其它很多指令,每个都有特殊的功能。例如,v-for 指令可以绑定数组的数据来渲染一个项目列表:

html代码:

8f30e82098910ed45a6c31bc4a2f918b.png

js代码:

21200a0a207101b2c31def391add7125.png

运行结果:

6ed23b3d53d4ed8035e139355c44b1fc.png

在控制台里,输入 app4.todos.push({ text: '新项目' }),你会发现列表最后添加了一个新项目。

处理用户输入

为了让用户和你的应用进行交互,我们可以用 v-on 指令添加一个事件监听器,通过它调用在 Vue 实例中定义的方法:

html代码:

db105601ebafa49a3e537706f843f926.png

js代码:

7188942709baa245204fdd11889a6a28.png

运行结果:

0afecbaade89469ed31cc2b119472672.png

注意在 reverseMessage 方法中,我们更新了应用的状态,但没有触碰 DOM——所有的 DOM 操作都由 Vue 来处理,你编写的代码只需要关注逻辑层面即可。

Vue 还提供了 v-model 指令,它能轻松实现表单输入和应用状态之间的双向绑定。

html代码:

a24e9fc7ceaf0d2fddaef2a1ef90d6f8.png

js代码:

2872a446060838a19de5f1e2fc6ec79b.png

运行结果:

16fddc0133c1dc86a12aa712d63388de.png

组件化应用构建

组件系统是 Vue 的另一个重要概念,因为它是一种抽象,允许我们使用小型、独立和通常可复用的组件构建大型应用。仔细想想,几乎任意类型的应用界面都可以抽象为一个组件树:

8b71849cb374223dd87a4e68f3c8c0ad.png

在 Vue 里,一个组件本质上是一个拥有预定义选项的一个 Vue 实例。在 Vue 中注册组件很简单:

// 定义名为 todo-item 的新组件

    Vue.component('todo-item', {  

    template: '这是个待办项'})

    var app = new Vue(...)

现在你可以用它构建另一个组件模板:

html代码:

78e9a59fa9d94c5135133ea27b40424d.png

但是这样会为每个待办项渲染同样的文本,这看起来并不炫酷。我们应该能从父作用域将数据传到子组件才对。让我们来修改一下组件的定义,使之能够接受一个 prop:

js代码:

3066342e1a4d5e030f225787fe6b8e5a.png

现在,我们可以使用 v-bind 指令将待办项传到循环输出的每个组件中:

html代码:

17ae1ddb2cd09be272c231895b4c5af4.png

js代码:

58098b0cf26679bad1fd2573b1d0a69d.png

运行结果:

fc4b456dfa9b690eeab31bb36fb6b40c.png

尽管这只是一个刻意设计的例子,但是我们已经设法将应用分割成了两个更小的单元。子单元通过 prop 接口与父单元进行了良好的解耦。我们现在可以进一步改进  组件,提供更为复杂的模板和逻辑,而不会影响到父单元。

在一个大型应用中,有必要将整个应用程序划分为组件,以使开发更易管理。在后续教程中我们将详述组件,不过这里有一个 (假想的) 例子,以展示使用了组件的应用模板是什么样的:

f4fe0b9f79ce754d5435f742f1dcaa53.png

准备好了吗?

刚才简单介绍了 Vue 核心最基本的功能——本教程的后续部分将更加详细地涵盖这些功能以及其它高级功能,喜欢或者想学的童鞋们赶紧点亮小心心吧31b2e785d23ccbf52ea2fc75b376bcbd.png

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐