本篇介绍Vue基础。
入门篇
vue.js是目前前端web开发最流行的工具库,由尤雨溪在2014年2月发布的。
另外几个常见的工具库:react.js /angular.js
官方网站:
vue.js目前有1.x、2.x和3.x 版本,本篇使用2.x,原因是目前3.x还不成熟。
vue.js库的下载
vue.js库的基本使用
vue的引入类似于jQuery,开发中可以使用开发版本vue.js,产品上线要换成vue.min.js。
三步走:
1 | 1.创建Vue对象 |
第一个vue示例:
1 |
|
上面代码将在页面中显示: Hello Vue!
vue.js的M-V-VM思想
MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式。
Model
指代的就是vue对象的data属性里面的数据。这里的数据要显示到页面中。
View
指代的就是vue中数据要显示的HTML页面(绑定标签),在vue中,也称之为“视图模板” 。
ViewModel
指代的是vue.js中我们编写代码时的vm对象了,它是vue.js的核心,负责连接 View 和 Model,保证数据data属性中的数据和html视图中的内容的一致性,所以前面代码中,data里面的数据被显示中p标签中就是vm对象自动完成的。
例子:
1 |
|
总结:
1 | 1. 如果要输出data里面的数据作为普通标签的内容,需要使用{{ }} |
常用指令
指令 (Directives) 是带有“v-”前缀的特殊属性。每一个指令在vue中都有固定的作用。
在vue中,提供了很多指令,常用的有:v-if、v-model、v-for等等。
指令会在vm对象的data属性的数据发生变化时,会同时改变元素中的其控制的内容或属性。
因为vue的历史版本原因,所以有一部分指令都有两种写法:
1 | vue1.x写法 vue2.x的写法 |
操作属性
格式:
1 | <标签名 :标签属性="data属性"></标签名> |
在 2.x 中,省略了v-bind,直接使用冒号就可以。
1 | <p :title="str1">{{ str1 }}</p> <!-- 也可以使用v-html显示双标签的内容,{{ }} 是简写 --> |
例子:显示输入的密码效果:
1 |
|
事件绑定
有两种事件操作的写法,@事件名 和 v-on:事件名,@是 2.x 版本,也是推荐使用的:
1 | <button v-on:click="num++">按钮</button> <!-- v-on 是vue1.x版本的写法 --> |
总结:
1 | 1. 使用@事件名来进行事件的绑定 |
例子:购物车中的商品数量调整,并改变总价
- 浮点数的运算永远是近似计算。我们需要四舍五入,保留两位。
1 |
|
操作样式
推荐使用 class ,而不使用 style 来操作样式。
控制标签class类名
格式:
1 | <h1 :class="值">元素</h1> 值可以是字符串、对象、对象名、数组 |
1 |
|
总结:
1 | 1. 给元素绑定class类名,最常用的就是第一种。 |
例子:网页背景开关灯
1 |
|
控制标签style样式
使用 style 的缺点:不好更新,不利于复制
1 | 格式1:值是json对象,对象写在元素的:style属性中 |
例子:vue版本选项卡
1 |
|
条件渲染指令
vue中提供了两个指令可以用于判断是否要显示元素,分别是v-if和v-show。
v-if
- 如果为false,则 v-if 会直接干掉标签
1 | 标签元素: |
v-else
- v-else指令来表示 v-if 的“else 块”,v-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面,否则它将不会被识别。
- 如果为false,则标签将不会在DOM中。
1 | 标签元素: |
v-else-if
可以出现多个v-else-if语句,但是v-else-if之前必须有一个v-if开头。后面可以跟着v-else,也可以没有。
如果为false,则 v-else-if 会直接干掉标签
1 | 标签元素: |
v-show
用法和v-if大致一样,区别在于2点:
- v-show后面不能v-else或者v-else-if
- v-show隐藏元素时,使用的是display:none来隐藏的,而v-if是直接从HTML文档中移除元素[ DOM操作中的remove ]
1 | 标签元素: |
例子:
1 | <div id="app"> |
列表渲染指令
- 通过v-for指令可以将一组数据渲染到页面中,数据可以是数组或者对象。
- 如:
student,index in student_list
1 |
|
Vue对象提供的属性功能
过滤器
过滤器,就是vue允许开发者自定义的文本格式化函数,可以使用在两个地方:输出内容和操作数据中。
它将对原本的数据加工成我们想要的新数据。
定义过滤器的方式有两种:全局过滤器与局部过滤器。
全局过滤器
格式:Vue.filter('过滤器名称',匿名函数)
1 | <div id="app"> |
局部过滤器
格式:filters:{ 过滤器函数 }
1 | <div id="app"> |
计算属性
- 当我们需要针对data的数据调整成另一个变量,留作其他地方进行运算时使用,可以使用计算属性得到一个新的变量
- 计算属性(computed),可以让我们把调整data数据的代码存在在该属性中。
- 如下例中从price中拿到price2
1 | <div id="app"> |
监听属性
侦听属性(watch),可以帮助我们侦听data某个数据的变化,从而做相应的自定义操作。
侦听属性是一个对象,它的键是要监听的对象或者变量,值一般是函数,当侦听的data数据发生变化时,会自定执行的对应函数,这个函数在被调用时,vue会传入两个形参,第一个是变化前的数据值,第二个是变化后的数据值。
例子:
1 | <div id="app"> |
Vue对象的生命周期
每个Vue对象在创建时都要经过一系列的初始化过程。在这个过程中Vue.js会自动运行一些叫做生命周期的的钩子函数,我们可以使用这些函数,在对象创建的不同阶段加上我们需要的代码,实现特定的功能。
话不多说,先上图:
生命周期:
钩子:
通过一个例子解释:
1 |
|
总结:
待补充!!!!!!!!!!!!!!!!!!!!!!!!!
阻止事件冒泡和刷新页面
只需要在事件后面加上.stop和.prevent,如@click.stop,@click.prevent
事件
事件(event)在js中表示用户和浏览器之间进行的一次交互过程
事件在触发时,就会有一个事件对象来记录整个事件发生的过程和发生的位置
事件冒泡
从事件发生位置由内及外,根据标签之间父子嵌套关系,逐层往外传播,让父级元素触发同类事件,这种事件的传递方式称为事件冒泡。
优点:可以利用这种机制实现事件的委托。
缺点:当前元素的父级元素有同类事件,会随着冒泡直接全部执行。
事件冒泡效果演示:
1 | <body onclick="alert('body')"> |
事件委托
- 场景:当一个父标签下有很多的子标签时,逐个给子标签绑定事件是一个繁琐,重复的过程。或者当我们在父标签中添加新的子标签时,对子标签绑定事件也有些繁琐。所以事件委托是很好的解决办法。
原生 js 如下:
1 | <ul id="list"> |
有适合事件委托的场景,那也就有不适合事件委托的场景了,如我只希望该标签响应而不希望它的父标签或者父级的父级标签响应。
阻止事件冒泡(原生js)
在函数定义内加入如下两句:
event.stopPropagation();
event.cancelBubble = true;
1 | <div id="box"> |
阻止事件冒泡(vue)
- 只需要在事件后面加上.stop如
@click.stop
1 | <div id="box" @click="show2"> |
阻止页面刷新
场景:对于会产生跳转的标签(如a标签,表单中的 submit,button)我们绑定了click事件的时候,但我们只想执行click事件,而不想刷新页面。例如:对于a标签,当它有 href 属性的时候,虽然 href 的值为空,但只要点击这个标签就会刷新页面。
- js 中直接使用return 就可以
- 在vue中,使用
@事件.prevent
1 | <div id="box"> |
综合练习
完成我的计划列表,该列表中可以添加,删除计划,同时每行信息可以上下移动。
效果如下:
核心:
- 使用push来完成添加
- 使用splice来完成上下移动以及删除。
完整代码如下:
1 |
|