1. 程式人生 > 程式設計 >一文讀懂vue動態屬性資料繫結(v-bind指令)

一文讀懂vue動態屬性資料繫結(v-bind指令)

v-bind的基本用法

一、本節說明

前面的章節我們學習瞭如何向頁面html標籤進行插值操作,那麼如果我們想動態改變html標籤的屬性,該怎麼辦呢?
這就是我們這節開始要講的內容v-bind.

二、 怎麼做

一文讀懂vue動態屬性資料繫結(v-bind指令)

  • “:”為v-bind的簡寫形式,也可稱為語法糖

三、 效果

一文讀懂vue動態屬性資料繫結(v-bind指令)

四、 深入

  • 在上圖中將a標籤的href屬性值設定為toutiao,VUE例項將自動去data裡面尋找toutiao屬性進行值繫結。
  • 不只是a標籤,所有的html標籤屬性都可以通過v-bind進行值繫結,然後通過改變資料動態改變它的屬性值。

錯誤的寫法

  • 注意一下:初學者容易犯錯,這樣寫是錯誤的,v-bind:href="{{toutiao}}" rel="external nofollow" 。
  • 下面的寫法也無法正常的完成屬性值繫結操作,注意雙引號中間有一對單引號。
<a v-bind:href="'toutiao'" rel="external nofollow" >今日頭條(v-bind:href)</a>

一文讀懂vue動態屬性資料繫結(v-bind指令)

加上單引號之後,並不會進行屬性值繫結,而是將字串原樣渲染後繫結屬性上。

v-bind繫結calss屬性(物件語法)

一、本節說明

v-bind繫結元素除了上一節那種直接進行單個屬性值繫結,還可以傳入物件和陣列。如:本節我們講解使用物件語法的方式對class屬性進行繫結。

  • 我們先來看看,傳統的html的css類引用語法
    <h2 class="css類名1 css類名2">html傳統寫法</h2>
  • v-bind物件語法,我們需要隊css-class類名賦一個boolean值,來決定css類是否生效。
    <h2 v-bind:class="{css類名1: true|false,css類名2: true|false}">{{message}}</h2>

初次看這種寫法,實在是繁瑣,沒有我們直接在html標籤上寫class更加簡單。但是v-bind:class語法的好處就在於,我們可以動態的改變布林值,來切換樣式。

  • 問題:我們使用了v-bind:class,那麼class屬性還能不能用了?
    答:可以,完全不耽誤,vue會幫你將二者合併
<h2 v-bind:class="{css類名1: true|false,css類名2: true|false}" class="css類名3">{{message}}</h2>

我們利用上面的語法,實現一個簡單的需求:為文字增加顏色,並點選按鈕實現顏色的切換。

二、 怎麼做

首先,定義兩個css的類,blue和red是兩個css的類名

.blue {
 color: blue;
}
.red {
 color: red;
}

然後我們來實現檢視模型,isBlue=true表示預設設定文字的顏色是藍色的

一文讀懂vue動態屬性資料繫結(v-bind指令)

有的時候我們會覺得在雙引號裡面去寫css類有點怪異,並且IDE無提示。css類比較多的情況下,我們也可以把屬性值物件繫結,通過自定義函式來返回

一文讀懂vue動態屬性資料繫結(v-bind指令)

三、 效果

上面兩種方式,實現的效果是一樣的,藍色的文字

一文讀懂vue動態屬性資料繫結(v-bind指令)

四、 深入

那我們如何動態的切換顏色呢,這就需要我們自定義方法啦

  • 檢視程式碼,@click是v-on:click的簡寫形式,changeColor是我們自定義的切換顏色的方法
<button @click="changeColor">換顏色</button>
  • 檢視模型(app),在methods程式碼段加入自定義函式changeColor
changeColor(){
  this.isBlue = !this.isBlue
  this.isRed = !this.isRed
}

最終效果

一文讀懂vue動態屬性資料繫結(v-bind指令)

v-bind繫結class屬性(陣列語法)

一、本節說明

在上一節中,我們講了如何使用v-bind物件語法的方式繫結class屬性,並實現了樣式的切換。這一節我們來學習v-bind繫結class屬性的另外一種語法-陣列語法。這種陣列語法在實際應用中並不如物件語法常見,其用法容易理解,但書寫相對繁瑣。

  • 陣列語法繫結class類
<div :class="['css類名1','css類名2']">陣列語法</div>
  • 陣列中巢狀物件
<div :class="['css類名1','css類名2',{css類名3: true|false}]"> 陣列中巢狀物件</div>
  • 注意物件裡面的css類名不用加單引號,和上一節用法是一致的

二、 怎麼做

我們利用陣列語法,實現一個和上一節物件語法一樣的需求:為文字增加顏色,並點選按鈕實現顏色的切換。首先我們定義css類

一文讀懂vue動態屬性資料繫結(v-bind指令)

下面是具體的實現

一文讀懂vue動態屬性資料繫結(v-bind指令)

  • 我們預設的定義了一個帶有css類名的陣列['bold','blue'],預設是粗體藍色
  • 使用pop()和push方法運算元組,pop是把陣列最後一個元素移除,push是在陣列尾部加入一個元素

三、 效果

一文讀懂vue動態屬性資料繫結(v-bind指令)

為文字增加顏色,並點選按鈕實現顏色的切換(這裡是瀏覽器截圖,點選無效)

四、 深入:哪些陣列操作是響應式的?

在上文中,我們使用陣列的pop()和push()方法去運算元組元素,而不是使用this.cssArray[1] = 'blue'直接運算元組。因為這種通過下標運算元組的方式不是響應式的,也就是說雖然陣列元素的值會發生變化,但不會導致頁面顏色發生切換。

所以,當我們希望通過操作資料影響頁面顯示內容及顯示效果的時候,要使用陣列相關的函式,不能直接使用陣列下標操作資料。下面列舉一下經常用到的響應式的陣列操作函式:

  • push(param…) 加入元素到陣列的尾部
  • pop() 從陣列的尾部彈出一個元素
  • shift() 從陣列的頭部移除一個元素
  • unshift(param…) 加入元素到陣列的頭部
  • splice() 可以實現指定下標的陣列元素的刪除、插入、替換
  • sort() 陣列排序
  • reverse() 陣列倒序排序

如果你對這些方法還不是很熟,有必要去複習一下這些js的基礎知識。

v-bind繫結style屬性

一、本節說明

上一節我們使用繫結物件或陣列的語法來實現css的class類動態樣式切換,這一節我們學習繫結style屬性值實現動態的樣式。

注意:

  • 我們使用v-bind來繫結class或style屬性的主要目的是實現:css樣式的動態切換。
  • 如果單純的為html標籤加樣式,不需要動態切換,就不需要使用v-bind繫結。屬於畫蛇添足,自找麻煩。

二、 怎麼做

直接在元素上通過 :style 的形式,書寫樣式物件

<h2 :style="{color: 'red','font-size': '40px'}">這是一個紅色的H2</h2>

實現一個字型大小動態變化的需求

一文讀懂vue動態屬性資料繫結(v-bind指令)

  • 動態修改data.fontSize,從而達到動態改變字號大小的目的。
  • 從上圖中,我們可以看到,可以將css樣式屬性儲存在一個物件裡面,繫結到style屬性上面。
  • 抽取其中需要變化的部分,用資料模型變數來替換。從而達到動態修改樣式的效果

三、 效果

一文讀懂vue動態屬性資料繫結(v-bind指令)

四、 深入

style屬性除了可以繫結一個物件,還可以使用陣列繫結的語法,引用多個 data 上的樣式物件。用法如下:

  • 在data上定義樣式:
data: {
 style1: { color: 'red','font-size': '40px','font-weight': '200' },style2: { font-style: 'italic' }
}

在元素中,通過屬性繫結的形式,將樣式物件組成一個數組應用到元素中:

<h2 :style="[style1,style2]">這是一個藍色的斜體的h2</h2>

以上就是一文讀懂vue動態屬性資料繫結(v-bind指令)的詳細內容,更多關於vue 動態屬性資料繫結的資料請關注我們其它相關文章!