第 1 篇:Vue.js 很高兴认识你

作者:HelloGitHub——追梦人物
Hello Vue
既然是学习编程,那就遵循一下那个古老的传统仪式。
首先我们新建一个 todos.html 文件,用任何一个你喜欢的文本编辑器或者 IDE 打开(例如 vscode、sublime、记事本、notepad++、webstorm 等等),然后写上下面的代码:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Vue Todo Tutorial</title></head>
<body>
<div id="app">{{ message }}</div>
</body>
<script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
<script>
var app = new Vue({
el: '#app',
data: function () {
return {message: 'Hello Vue!'}
}
})
</script>
</html>
我们写了一个简单的 HTML 文件,使用 Script 标签引入了 Vue,版本是 2.5.16。然后我们写了几行 js 代码。在代码中我们 new(创建) 了一个 Vue 对象,并向这个对象传递了一些选项,例如告诉 Vue 挂载的元素(el,即elements 的缩写)是 id 为 app 的那个 div,并且在 data 中绑定了一个名为 message 的变量,其值为 'Hello Vue!',然后我们就可以在 HTML 文档中引用这个 message 。Vue 在后面帮我们做么很多神奇的事情,它把 {{ message }} 替换成了 Vue 对象中对应的值。
保存代码并用浏览器打开,可以看到浏览器显示了 “Hello Vue!”,你也可以尝试修改 message 的值,发现显示的内容会跟着变化。
表单绑定
再来看一个神奇的例子,我们把代码换成下面这样:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Vue Todo Tutorial</title></head>
<body>
<div id="app">
<input type="text" v-model="value">
<input type="button" value="发送">
<div>value 的值是:{{ value }}</div>
</div>
</body>
<script src="https://cdn.bootcss.com/vue/2.5.16/vue.js"></script>
<script>
var app = new Vue({
el: '#app',
data: function () {
return {value: ''}
}
})
</script>
</html>
这里要关注一下文档的 input 标签里 v-model="value" 这个东西。v-model 被称为 Vue 的指令,指令可以用来做很多事,比如用于 if 条件判断的 v-if,用于绑定值的 v-bind、用于绑定监听事件的 v-on 等等,这在以后会接触到。而这个 v-model 指令的作用是将 input 元素 value 属性的值和我们创建的 Vue 对象中 value 的值进行绑定,我们知道 input 有一个 value 属性,它的值会在浏览器显示(例如后面那个 button 按钮的发送),Vue 将这个值绑定后,在 input 中引起的 value 值变化就会实时反映到关联的 Vue 对象,所以会看到下方引用的 {{ value }} 也会跟着变化。
打开浏览器,然后在文本框做一些输入,试试效果!
加点方法
接下来我们在 Vue 对象中加点方法,还是上面的例子,只是在 Vue 对象中加了一个方法:
var app = new Vue({
el: '#app',
data: function () {
return {value: ''}
},
// 这是新增的方法
methods: {
send: function () {
alert('发送成功!');
this.value = ''
}
}
})
方法声明在 method 对象中,key 为方法名,值为对应的函数。我们想做的事情很简单,就是点击发送按钮后显示一个发送成功的消息,然后将 value 的值清空。
打开浏览器,发现怎么点都没有效果!因为 Vue 并不知道我们点击了按钮,为了让 Vue 监听到我们点击按钮的事件,需要在被点击的元素上绑定一个 click 事件,前面说过绑定事件用 v-on,因此在发送按钮上加上相应的代码:
<input type="button" value="发送" v-on:click="send"/>
在输入框输入一些文字,然后点击发送按钮试试。
计算属性
Vue 还可以根据绑定的数据做一些计算,然后我们就可以引用计算的结果。假设我们想实时统计输入的字数,我们可以在 Vue 对象里加上对 value 长度的计算值:
var app = new Vue({
el: '#app',
data: function () {
return {value: ''}
},
methods: {
// 省略...
},
// 这是新增的计算属性
computed: {
count: function () {
return this.value.length
}
}
})
计算属性申明到 computed 对象里,这个对象的键是计算的结果,值是计算函数,这里我们计算了 value 的长度。以后在 Vue 对象中就可以使用 this.count 引用计算结果,也可以在关联的模板中直接引用,和绑定的数据 value 的用法非常类似。比如我们在文档中引用这个 count:
<div id="app">
<input type="text" v-model="value">
<input type="button" value="发送" v-on:click="send"/>
<div>value 的值是:{{ value }}</div>
<!-- 引用 count -->
<div>字数:{{ count }}</div>
</div>
打开浏览器看看效果。
加点样式
Vue 还可以动态地帮我们为元素绑定样式(class 属性),假设如果我们希望 input 中没有任何值输入,即 value 的值为空时,input 的边框为红色以提醒用户没有内容。首先我们写一个简单的样式(这个样式非常简单,不需要有 CSS 基础也看得懂),样式通常写到 head 标签里,用 style 包裹:
<head>
<meta charset="UTF-8"><title>Vue Todo Tutorial</title>
<style>
.empty {
border-color: red;
}
</style>
</head>
然后将这个 empty 用于 input 的 class 属性,浏览器就会渲染对应的样式:
<div id="app">
<input type="text" class='empty' v-model="value">
...
</div>
当然现在无论 value 为何值边框都是红色的,因为 class 始终为 empty,现在让 Vue 来帮我们。前面说了,绑定值用 v-bind 指令,我们修改一下代码,为 input 的 class 绑定一个值:
<div id="app">
<input type="text"
v-bind:class='{empty: !count}'
v-model="value">
...
</div>
Vue 会根据 empty 后的表达式 !count 的真假来判断 class 的值是否为 empty,如果为真(即 count = 0 的情况),则 class 的值为 empty,否则为空。
打开浏览器看看效果!
练习
我们通过这几个循序渐进的例子体会了 Vue 的部分核心特性,这些特性对我们开发 Todo 应用非常有帮助。当然这个例子还有一点小瑕疵,就由你来作为练习改进一下。
练习一: 尽管我们在用户没有输入时用红色边框提醒用户内容为空,但是用户点击按钮后仍然显示提交成功的通知,这是不合理的。合理的情况应该是弹出通知提示用户请输入内容。修改示例的代码,使其达到上述效果。(提示:修改 send 方法)
练习二: 即使内容为空,输入框下方依然显示 value 的值是:,这看起来很奇怪。我们希望只有用户真正地输入了内容后,才提示 value 的值,请参阅 Vue 关于指令的官方文档,找到满足我们需求的指令,修改示例代码以达到上述效果。(提示:我们应该通过判断 value 是否有值来决定是否显示输入框下边的 div 元素。)
Vue 的指令文档:https://cn.vuejs.org/v2/guide/conditional.html
接下来正式开始我们的 Todo 应用的开发吧!
第 1 篇:Vue.js 很高兴认识你的更多相关文章
- Vue.js 很好,但会比 Angular 或 React 更好吗?
文章转自:http://www.oschina.net/translate/vuejs-is-good-but-is-it-better-than-angular-or-rea Vue.js 是一个用 ...
- 第六篇:vue.js模板语法(,属性,指令,参数)
Vue.js 的核心是一个允许你采用简洁的模板语法来声明式的将数据渲染进 DOM 的系统. 结合响应系统,在应用状态改变时, Vue 能够智能地计算出重新渲染组件的最小代价并应用到 DOM 操作上.( ...
- 第十篇:vue.js for循环语句(大作业进行时)
Vue.js 循环语句 <div id="app"> <ol> <li v-for="site in sites"> /*f ...
- 第五篇:vue.js起步
<div id="vue_det"> //使改动全部在指定的 div 内,div 外部不受影响 <h1>site : {{site}}</h1> ...
- 第十一篇:vue.js监听属性(大作业进行时)
这个知识点急着用所以就跳过<计算属性>先学了 首先理解一下什么是监听:对事件进行监控,也就是当我进行操作(按了按钮之类的事件)时,会有相应的事情发生 上代码 <div id = &q ...
- Vue.js 入门指南之“前传”(含sublime text 3 配置)
题记:关注Vue.js 很久了,但就是没有动手写过一行代码,今天准备入手,却发现自己比菜鸟还菜,于是四方寻找大牛指点,才终于找到了入门的“入门”,就算是“入门指南”的“前传”吧.此文献给跟我一样“白痴 ...
- 从template到DOM(Vue.js源码角度看内部运行机制)
写在前面 这篇文章算是对最近写的一系列Vue.js源码的文章(https://github.com/answershuto/learnVue)的总结吧,在阅读源码的过程中也确实受益匪浅,希望自己的这些 ...
- Vue.js 开发实践:实现精巧的无限加载与分页功能
本篇文章是一篇Vue.js的教程,目标在于用一种常见的业务场景--分页/无限加载,帮助读者更好的理解Vue.js中的一些设计思想.与许多Todo List类的入门教程相比,更全面的展示使用Vue.js ...
- 聊聊Vue.js组件间通信的几种姿势
写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue.js源码,并做了总结与输出. 文章的原地址:https://github.com/a ...
随机推荐
- 什么是Python???
1.python是一种解释型语言,这就是说python不用像C语言或者C的衍生语言那样在执行前进行编译. 2.Python是一种动态类型的语言,就是python支持x = 111或者x="1 ...
- gRPC-Protocol语法指南
语法指南 (proto3) Defining A Message Type Scalar Value Types Default Values Enumerations Using Other Mes ...
- python3 连接数据库~
~目前记录的是针对python3写的数据库连接,不适用于pyhon2.python3如果想要与数据库进行连接,则需要先下载对应各数据库的插件包,然后导入包.python3的插件下载地址:https:/ ...
- CentOS7的下载及虚拟机的创建
一.CentOS的安装 1,首先打开开源镜像网站:www.mirrors.163.com(网易开源镜像网站),www.mirrors.aliyun.com(阿里云开源镜像网站) 以网易为例 2.点击进 ...
- Book of Shaders 03 - 学习随机与噪声生成算法
0x00 随机 我们不能预测天空中乌云的样子,因为它的纹理总是具有不可预测性.这种不可预测性叫做随机 (random). 在计算机图形学中,我们通常使用随机来模拟自然界中的噪声.如何获得一个随机值呢, ...
- Camera光学、成像和 3A 算法 (视觉),camera开发
简单介绍 转载:https://blog.csdn.net/ShareUs/article/details/94295628 成像与光学.计算机视觉,图像处理,数字成像.自动驾驶与视觉. 镜头设计:人 ...
- python中remove函数的坑
摘要:对于python中的remove()函数,官方文档的解释是:Remove first occurrence of value.大意也就是移除列表中等于指定值的第一个匹配的元素. 常见用法: a ...
- CSS常见反爬技术
目录 利用字体 反爬原理 应对措施 难点: 利用背景 反爬原理 应对措施 利用伪类 反爬原理 应对措施 利用元素定位 反爬原理 应对措施 利用字符切割 反爬原理 应对措施 利用字体 反爬原理 反爬原理 ...
- MeteoInfoLab脚本示例:AVHRR HDF数据
这里演示读取和绘制AVHRR hdf格式数据,以sst(海表面温度)为例. 脚本程序: #Add data file f = addfile('D:/Temp/hdf/2006001-2006005. ...
- day18 Pyhton学习 内置函数最后七个
1. enumerate 枚举函数 for i in enumerate(['a','b','c'],1): print(i)#(1, 'a')(2, 'b')(3, 'c') goods_lst= ...