Vue.js进阶之路3

纸飞机 发表于 2021/10/19 00:59:18 2021/10/19
【摘要】 一.class(类)的绑定 1.我们为什么要绑定类名? Vue.js有一个特点就是数据驱动视图那么以此可以形成以数据来控制类名(class),从而改变样式。(可能有点生硬但这样理解也好...

一.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>
      
     
    • 1
    • 2

    3.案例

    老规矩,先来配置项

    new Vue({
        el: '#app',
        data: {
          classFlag: true,
          classFlag1:false,
          // size: 'yanyabing'
          size: 'size',
          bg: 'bg'
        },
        methods: {
          changeClass(){
            this.classFlag = !this.classFlag
          }
        }
      })
      
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    再来个css

    .size{
          width: 50px;
          height: 50px;
          background: red;
          margin: 10px;
        }
        .bg{
          background: blue;
        }
      
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    先看看平常类名的写法:

    <div class="size"></div>
    <div class="size bg"></div>
    //一种是单个,一种是多个,那么我们的Vue.js也是可以多个的
      
     
    • 1
    • 2

    再来看看对象形式绑定的写法:

     <div :class = "{'size': classFlag}"></div>
     <div :class = "{'size': classFlag,'bg': classFlag}"></div>
     <div :class = "{size: classFlag}"></div>
      
     
    • 1
    • 2

    在这里可以说是做了个判断,如果classFlag为true那么类名就可以绑上去,如果为false则失败

    类名绑定

    如果我们改成

    <div :class = "{'size': classFlag,'bg': classFlag1}"></div>
      
     

      它的输出是这样的,这就印证了上面的说法,为false就不绑定

      最后来看看数组形式的绑定方法

      <div :class = "['size','bg']">  </div>
      <div :class = "[size,bg]">  </div>
        
       
      • 1

      非常的简单的输出下面:

      这里有个小建议:建议大家加上引号

      除了直接写以外,里面还是支持一些表达式的,我们来写个小的综合案例吧(开关切换)

      案例要求:

      • 点击按钮切换元素的class名
      <button @click = "classFlag=!classFlag"> change class </button>
      <button @click = "changeClass"> change class </button>
      <div :class = "[classFlag?size:bg]"></div> 
        
       
      • 1
      • 2

      两种写法一个方法写在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> 
        
       
      • 1

      B.数组

      <div
          :style = "[{width:'50px',height:'50px',background:'yellow'}]"
          ></div>
      <div
          :style = "[style]"
          ></div>
      <div
           :style = "[styleFlag?style:'']"
      ></div>
        
       
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8

      三、计算属性(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('')
            }
          }
        
       
      • 1
      • 2
      • 3
      • 4
          <p>
            {{ reverseHandler() }}//语义性不高
          </p>
        
       
      • 1
      • 2

      2.

      <p>
         {{ msg.split('').reverse().join('') }}//1.html结构不纯粹 2. 写起来不舒服
      </p>
        
       
      • 1
      • 2

      computed写法:

       computed: {
            /* 多个方法 */
            reverseMsg(){
              return this.msg.split('').reverse().join('')
            }
        
       
      • 1
      • 2
      • 3
      • 4
      <p>
         {{ reverseMsg }}
       </p>
        
       
      • 1
      • 2

      下面我们要准备做一个TodoList的项目了,在下一篇

      文章来源: root181.blog.csdn.net,作者:前端纸飞机,版权归原作者所有,如需转载,请联系作者。

      原文链接:root181.blog.csdn.net/article/details/89400367

      【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
      • 点赞
      • 收藏
      • 关注作者

      评论(0

      0/1000
      抱歉,系统识别当前为高风险访问,暂不支持该操作

      全部回复

      上滑加载中

      设置昵称

      在此一键设置昵称,即可参与社区互动!

      *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

      *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。