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的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js进阶之路1

Vue.js进阶之路1

Vue.js进阶之路2

Vue.js进阶之路2

Vue.js进阶之路5

Vue.js进阶之路5