Vue.js进阶之路3
Posted 纸 飞机
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue.js进阶之路3相关的知识,希望对你有一定的参考价值。
一.class(类)的绑定
1.我们为什么要绑定类名?
Vue.js有一个特点就是数据驱动视图那么以此可以形成以数据来控制类名(class),从而改变样式。(可能有点生硬但这样理解也好)
类名和数据的绑定我们使用v-bind(单向数据绑定)
2.类名的绑定方式
A.对象的形式
<div :class = "{'size': classFlag,'bg': classFlag}"></div>
B.数组的形式
<div :class = "['size','bg']"></div>
<div :class = "[size,bg]"></div>
<div :class = "[classFlag?size:bg]"></div>
3.案例
老规矩,先来配置项
new Vue({
el: '#app',
data: {
classFlag: true,
classFlag1:false,
// size: 'yanyabing'
size: 'size',
bg: 'bg'
},
methods: {
changeClass(){
this.classFlag = !this.classFlag
}
}
})
再来个css
.size{
width: 50px;
height: 50px;
background: red;
margin: 10px;
}
.bg{
background: blue;
}
先看看平常类名的写法:
<div class="size"></div>
<div class="size bg"></div>
//一种是单个,一种是多个,那么我们的Vue.js也是可以多个的
再来看看对象形式绑定的写法:
<div :class = "{'size': classFlag}"></div>
<div :class = "{'size': classFlag,'bg': classFlag}"></div>
<div :class = "{size: classFlag}"></div>
在这里可以说是做了个判断,如果classFlag为true那么类名就可以绑上去,如果为false则失败
如果我们改成
<div :class = "{'size': classFlag,'bg': classFlag1}"></div>
它的输出是这样的,这就印证了上面的说法,为false就不绑定
最后来看看数组形式的绑定方法
<div :class = "['size','bg']"> </div>
<div :class = "[size,bg]"> </div>
非常的简单的输出下面:
这里有个小建议:建议大家加上引号
除了直接写以外,里面还是支持一些表达式的,我们来写个小的综合案例吧(开关切换)
案例要求:
- 点击按钮切换元素的class名
<button @click = "classFlag=!classFlag"> change class </button>
<button @click = "changeClass"> change class </button>
<div :class = "[classFlag?size:bg]"></div>
两种写法一个方法写在methods里,一个直接在v-on:click里写,div里的数组里用了三目运算,classFlag为true就是size,flase就是bg,click事件改变的classFlag的值,所以达到了切换的目的。
二、style(样式)的绑定
1.为什么要绑定样式呢?
先看看样式的几种写法:
A.style双标签嵌入样式(内联)
B.行内样式
C.外部引用
D.@import('./csss/….')
Vue.js是数据控制视图的,实现过程
数据 --控制--样式---》 功能 效果
样式 要和 数据 绑定--》 v-bind(单向绑定)
2.样式的绑定形式
A.对象
<div :style = "{width:'50px'}"></div>
<div :style = "style"></div>
B.数组
<div
:style = "[{width:'50px',height:'50px',background:'yellow'}]"
></div>
<div
:style = "[style]"
></div>
<div
:style = "[styleFlag?style:'']"
></div>
三、计算属性(computed)
1.为什么要有计算属性?
a.直接模板语法中直接写逻辑 // 1.html结构不纯粹 2. 写起来不舒服
b.方法运行 // 但是语义性不高
2.计算属性是什么?
a.计算属性是new Vue(options) options中的一个配置项, 用computed表示, 它的值是一个对象
b.计算属性的值中存放的是方法
3.computed 比较methods
同:都是函数, 都可以书写逻辑
异:
a:methods中的方法运行依赖于事件或是方法调用 举例 @click = eventFnName {{ eventFnName() }}
b.computed的方法名可以直接当做变量一样用, 类似于直接在data中定义的数据
4.什么时候使用计算属性呢?
a.项目中有逻辑
b.数据类似变量
5.案例
场景:我又一个字符串"abcdef",我想它反向输出
methods写法:
1.
methods: {
reverseHandler(){
return this.msg.split('').reverse().join('')
}
}
<p>
{{ reverseHandler() }}//语义性不高
</p>
2.
<p>
{{ msg.split('').reverse().join('') }}//1.html结构不纯粹 2. 写起来不舒服
</p>
computed写法:
computed: {
/* 多个方法 */
reverseMsg(){
return this.msg.split('').reverse().join('')
}
<p>
{{ reverseMsg }}
</p>
下面我们要准备做一个TodoList的项目了,在下一篇
以上是关于Vue.js进阶之路3的主要内容,如果未能解决你的问题,请参考以下文章