美文网首页Vue知识总结
Vue基础知识(二) - v-bind绑定class属性

Vue基础知识(二) - v-bind绑定class属性

作者: SingingHan | 来源:发表于2021-11-04 15:51 被阅读0次
  • 在我们学习前端的初期,我们会发现在开发中,总是需要频繁地对标签的属性进行设置与修改,例如:在DOM元素上进行 setAttribute() , getAttribute() 方法的调用
  • 随之我们会发现一个问题,当DOM元素的属性值需要频繁地发生修改时,需要我们频繁地对属性本身去进行修改,我们的大部分时间和精力基本都用在修改属性这件事上,这对我们开发来说是非常麻烦的一件事。

此时Vue的一个指令: "v-bind" 指令 就是来简化这件“麻烦事”的 ,它能绑定一个或多个属性, 并且动态地对绑定属性

(1.1) v-bind指令的基本使用:
  • 在标签中写入 : v-bind:属性= " 变量 "
// 例如: 
<img v-bind:src="变量" /> 
<a v-bind:href="变量" />

注意:双括号" "内的变量指的是Vue实例中 data属性 里面的变量

  • 比如我们想在 "img" 元素上绑定一个 src 属性 或 给一个 "a" 元素绑定href属性
    代码如下:
<body>
  <div id="app"></div>

  <template id="my-app">
    <!-- vue2 template模板中只能有一个根元素 -->
    <!-- vue3 是允许template中有多个根元素 -->
    <!-- 1.v-bind的基本使用 -->
    <img v-bind:src="imgUrl" alt=""> 
    <a v-bind:href="vueUrl">Vue.js 入门</a>
  </template>
  // 引入vue
  <script src="../js/vue.js"></script>
  <script>
    const App = {
      template: '#my-app',
      data() {
        return {
          imgUrl: './vue.jpg',
          vueUrl: 'https://cn.vuejs.org/'
        }
      }
    }
    Vue.createApp(App).mount('#app');
  </script>

页面结果:


result.png

竟然这个指令这么香, 那它有语法糖(简便写法)吗? - 还别说,还真有

(1.2) v-bind的简便写法:

v-bind:属性 = "变量" 改为 :属性="变量", 也就是只剩下冒号 ":属性"
例子代码如下:

  <template id ="my-app">
    <img :src="imgUrl" alt=""> 
    <a :href="vueUrl">Vue.js 入门</a>
  </template>
(2) v-bind绑定 class 属性:

绑定 class属性 分为 两种方式: (1)对象语法 (2)数组语法

  • (1).对象语法的使用:
    (1.1).对象语法的含义是: class属性后面跟的是一个对象。这个对象的结构是 "{ '类名1': 布尔值1, '类名2': 布尔值2, ...}"
    用法一:普通的绑定方式, 绑定data中的变量
<div :class="className">Hello World</div>
// data
data() {
  return {
    className: 'hello',
    }
  }
}
result1.png

用法二:直接通过{}绑定一个类,对象语法: {'active': isActive}

<div :class="{'active': isActive}">Hello World</div>
// data
data() {
  return {
    isActive: true,
  }
}

注意: isActive是一个"布尔值"的变量

result2.png

用法三:可以通过多个键值对,绑定多个类

<div :class="{active: isActive, title: true}">Hello World</div>
// data
data() {
  return {
    isActive: true,
  }
}
result3.png

用法四:与普通的类同时存在(声明),并不会发生冲突,而是会结合在一起

<div class="paragraph" :class="{active: isActive, title: true}">Hello World</div>
// data
data() {
  return {
    isActive: true,
  }
}

注:如果 isActive 和 title 都为true,那么dom元素上 会绑定 paragraph / active / title 三个类

result4.png
用法五: 绑定data函数中的对象
<div :class="classObj">Hello World</div>
// data
data() {
  return {
    classObj:  {
      active: true,
      title: true
    }
  }
}
result5.png
用法六: 将返回的对象放到一个methods方法或者computed中
<div :class="getClassObj()">Hello World</div>
// methods
methods: {
  getClassObj() {
    return {
      active: true,
      title: true
    };
  }
},
// computed
computed: {
  classObj() {
    return {
      active: true,
      title: true
    };
  }
}
result6.png
  • (2)数组语法的使用
    用法一: 使用data中的变量
<h2 :class="['active', title]">Hello World</h2>
// data
data() {
  return {
    title: 'cba',
  }
}
result-1.png

用法二:使用三元表达式

<h2 :class="['paragraph', isActive ? 'active': '']">Hello World</h2>
// data
data() {
   return {
     isActive: true
   }
}
result-2.png

用法三:数组中穿插对象

<h2 :class="['paragraph', 'title', { 'active': isActive }]">Hello World</h2>
// data
data() {
  return {
    isActive: true
  }
}
image.png

相关文章

网友评论

    本文标题:Vue基础知识(二) - v-bind绑定class属性

    本文链接:https://www.haomeiwen.com/subject/kevptltx.html