Vue2学习计划四:v-bind

我们上一节讲了插值,主要是针对DOM的文本节点操作。那么如果现在有个需求,我们需要点击按钮,更换图片,怎么办?或者我们需要更换一下元素的样式该怎么实现呢?

Vue当然有办法,这就是v-bind的功效了。主要用于动态绑定属性。可以用冒号来缩写。

一、v-bind基本使用(动态绑定链接地址)

我们这里主要讲一下怎么使用v-bind和v-bind的语法糖,实现了数据动态绑定超链接a元素的href和图片的src属性。以后只需要修改Vue实例里的数据就可以更换图片和链接地址。

<div id="app">
  <img v-bind:src="imgUrl" alt="">
  <a v-bind:href="baiduUrl">百度一下你就知道</a>
  <hr>
  <h2>语法糖v-bind</h2>
  <img :src="imgUrl" alt="">
  <a :href="baiduUrl">语法糖实现转跳百度</a>
</div>
<script src="./../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      imgUrl: 'https://cn.vuejs.org/images/logo.svg',
      baiduUrl: 'https://www.baidu.com'
    }
  })
</script>

其实使用v-bind用于修改图片或者超链接地址,最省事就是在属性名之前加上:(冒号),或者写全了就是加上v-bind:

实现截图:

image-20210728170808520.png

二、v-bind动态绑定class

class属性一般又叫做类名,用于指向特定的样式。还可以用于区别相同名字的元素。在Vue里面动态绑定class有两种方式,一种是对象语法绑定,另一种是数组语法绑定。

2.1 对象语法

这里对象指{key1: value, key2: value2}或{key1: true, key2: false}等。所谓对象语法,就是v-bind动态绑定class属性时,属性值使用对象的方法实现。综合起来就是v-bind:class="{key1: value1, key2: value2}"这样实现。

接下来我们实现一个使用class属性控制h2元素里的文字颜色的例子,初始用class控制样式显示文字为绿色,点击按钮之后控制class属性编程红色。

<style>
  .active {
     color: red;
}
  .line {
      color: green;
}
</style>
<div id="app">
  <h2 v-bind:class="{active: isActive, line: isLine}">{{message}}</h2>
  <button v-on:click="changeColor">改变颜色</button>
</div>
<script src="./../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '谢谢赏脸。。。',
      isActive: false,
      isLine: true
    },
    methods: {
      changeColor(){
        this.isActive = !this.isActive;
        this.isLine = !this.isLine
      }
    }
  })
</script>

实现截图:

image-20210728173706518.png

这个对象实现class的动态绑定,也是最常用的方法,有以下需要注意:

  1. 直接通过{}绑定一个类

  2. 可以同时传入多个值,比如上面代码中的active和line

  3. 可以和普通的class同时存在不会覆盖

<h2 class="title" :class="{'active': isActive}">hello world</h2>
  1. 如果过于复杂,可以放在methods里的方法里或者computed里的计算属性里。
<h2 class="title" :class="classes">hello world</h2>

2.2 v-bind动态绑定class(数组语法)

这种方法用得较少,实质上就是class的属性值用[]实现。

在这里要着重讲一下,属性值是用引号括起来的这里为了表述清除,直接指代双引号,就是属性值是用双引号括起来的。然后属性值内部如果有单引号括着就是字符串,没有单引号的字符就是变量。比如:class="['active', line]"里面的active就是字符串,line就是变量。

接下来用代码实现了数组语法,并且使用方法返回class属性值

<style>
    .active {
        color: red;
    }
    .line {
        color: green;
    }
  </style>
<div id="app">
  <h2 v-bind:class="['active']">{{message}}</h2>
  <h2 :class="changeColor()">使用方法返回class属性</h2>
</div>
<script src="./../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '谢谢赏脸。。。',
    },
    methods: {
      changeColor(){
        return "line"
      }
    }
  })
</script>

实现截图:

image-20210728184707554.png

三、v-bind动态绑定style

一般我这种菜鸡都使用style给元素添加属性,比如要改个字体颜色啊,换个大号的字啊。都是使用style完成的。如果只改一个样式还好,当需要同时改变字体大小,字体颜色,就会比较麻烦了。所以动态绑定style同样都有二种方式跟前面class一样。

3.1 对象语法绑定style

这里使用v-bind:style来绑定一些CSS内联样式时需要注意:

  • 使用驼峰式:fontSize

  • 使用短横线分割(不能忘记单引号):'font-size'

  • 属性值要使加单引号,不然Vue会按照变量进行解析

接下来用代码实现一下使用v-bind:style绑定字体颜色的实例

<div id="app">
  <h2>{{message}}</h2>
  <h2 v-bind:style="{fontSize: '30px'}">30px使用驼峰:{{message}}</h2>
  <h2 :style="{'font-size': '30px'}">30px使用短横线: {{message}}</h2>
  <h2 :style="{fontSize: '40px', color: finalColor}">字体大小和颜色:{{message}}</h2>
  <h2 :style="getStyle()"></h2>
  <h2 :style="getStyle()">函数返回样式: {{message}}</h2>
</div>
<script src="./../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: '欢迎指正批评',
      finalColor: 'red'
    },
    methods: {
      getStyle: function(){
        return {fontSize: '40px', color: 'green'};
      }
    }
  })
</script>

实现截图:

image-20210728191228087.png

3.2 数组形式动态绑定style

这种用法很少用,用起来比较麻烦,直接举例,了解一下即可。

<div id="app">
<h2>{{message}}</h2>
  <h2 v-bind:style="[style1, style2, style3]">{{message}}</h2>
</div>

<script src="./../js/vue.js"></script>
<script>
  const app = new Vue({
    el: '#app',
    data: {
      message: "hello vue",
      style1: {fontSize: '30px'},
      style2: {color: 'red'},
      style3: {textDecoration:'underline'}
    }
  })
</script>

以上就是v-bind常用的用法了。有没有小白想一起学前端的,我们可以组个队。有意向的请私信我。。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容