v­bind以及class與style的綁定-vue筆記4

在數據綁定中,最常見的兩個需求就是元素的樣式名稱 class 和內聯樣式 style 的動
態綁定

一、動態綁定href和src

使用v-bind動態設置鏈接的 href 屬性和圖片的 src 屬性,當數據變化時,就會重新渲
染。
代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <!-- v-bind的作用:綁定活的屬性!! -->
    <div id="app">
        <a v-bind:href="url">我是百度</a>
        <img :src="imgUrl" alt="">
    </div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> 
<script> 
    var app=new Vue({
        el:'#app',
        data:{
            url:'https://www.baidu.com',
            imgUrl:'https://www.baidu.com/img/bd_logo1.png'

        }
    })
</script>       
</body>
</html>

執行結果

clipboard.png
當我們改變url的值,a連接就指向了淘寶
clipboard.png

clipboard.png

二、動態綁定 class 的幾種方式

1、普通綁定class

2、class 對象語法

給 v­bind:class 設置一個對象,可以動態地切換 class。
綁定class對象語法,對象的鍵是類名,值是布爾值.如果布爾值是true,代表該元素添加了對應的class,爲false,則沒有添加

 <div :class="{divStyle :isActive,borderStyle:isBorderActive}"></div>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .divStyle{
            background-color: darkred;
            width: 100px;
            height: 100px;
        }
        .borderStyle{
           border: 6px solid yellow;
        }
    </style>
</head>
<body>
    <div id="app">
        綁定class對象語法,對象的鍵是類名,值是布爾值.如果布爾值是true,代表該元素添加了對應的class,爲false,則沒有添加
        <div :class="{divStyle :isActive,borderStyle:isBorderActive}"></div>
    </div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> 
<script> 
    var app=new Vue({
        el:'#app',
        data:{
            isActive:true, //代表給div添加了divstyle
            isBorderActive:true,
        }
    })
</script>       
</body>
</html>

**當 class 的表達式過長或邏輯複雜時,還可以綁定一個計算屬性,這是一種很友好和常見的
用法,一般當條件多於兩個時, 都可以使用 data 或 computed**

   <style>
        .active{
            background-color: black;
            width: 100px;
            height: 100px;
        }
    </style>
</head>
<body>
    <div id="app">
        <div :class="classNames">計算屬性</div> 
    </div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> 
<script> 
    var app=new Vue({
        el:'#app',
        data:{
            isActive:true, //代表給div添加了divstyle
            isBorderActive:false
 
        },
        computed:{
            classNames:function(){
                return {
                    active:this.isActive&& !this.isBorderActive
                }//return一個對象,active是鍵名,值是布爾值,因爲很複雜
            }
        }
    })
</script>   

3、數組語法

當需要應用多個 class 時, 可以使用數組語法 , 給:class 綁定一個數組,應用一個 class
列表:數組成員直接對應className--類名

    <style>
        .active{
            background-color: black;
            width: 100px;
            height: 100px;
        }
        .error{
            border: 6px solid yellow; 
        }
    </style>
</head>
<body>
    <div id="app">
         綁定class數組語法,數組中的成員直接對應類名<br>
         <div style="color:#fff" :class="[activeclass,errorclass]">我是數組綁定class</div>
    </div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> 
<script> 
    var app=new Vue({
        el:'#app',
        data:{
            activeclass:'active',
            errorclass:'error'
        }
    })
</script>  

4、數組和class對象混用——————看演示

errorclass永遠存在,active看情況存在

   <style>
        .active{
            background-color: black;
            width: 100px;
            height: 100px;
        }
        .error{
            border: 6px solid yellow; 
        }
    </style>
</head>
<body>
    綁定class:<br>
    <div id="app">
        數組和對象混用,第一個成員是對象,第二個成員是數組成員<br>
        <div style="color:#fff" :class="[{active:isActive},errorclass]">數組</div>
    </div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> 
<script> 
    var app=new Vue({
        el:'#app',
        data:{
            isActive:true, 
            errorclass:'error'
        }
    })
</script>

5、 在組件上使用 : 暫時不考慮—­挖坑

三、綁定內聯樣式

使用 v­bind:style (即:style ) 可以給元素綁定內聯樣式,方法與 :class 類似,
也有對象語法和數組語法,看起來很像直接在元素上寫 CSS:
注意 : css 屬性名稱使用駝峯命名( came!Case )或短橫分隔命名( kebab­case
),

  • 對象語法
<div :style="{'color':color,'fontSize':fontSize +'px'}">數組</div>//注意要加px
  • 數組語法,很不常見,較爲常用 的應當是計算屬性
</head>
<body>
    <div id="app">
            對象語法綁定內聯樣式:鍵代表style的屬性值,值代表屬性對應的值了。<br>
            駝峯寫法:vue中只要是大寫字母,就會給你轉換成-和小寫。<br>
        <div :style="{'color':color,'fontSize':fontSize +'px'}">數組</div>
    </div>
    <div id="app2">
            style數組語法綁定內聯樣式<br>
        <div :style="[styleA,styleB]">數組</div>
    </div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script> 
<script> 
    var app=new Vue({
        el:'#app',
        data:{
            color:'red', 
            fontSize:16
        }
    })
    var app2=new Vue({
        el:'#app2',
        data:{
            styleA:{
                width:'100px',
                border:'1px solid red'

            },
            styleB:{
                color:'blue'
            }
        }
    })
</script> 

使用 :style 時, Vue .js 會自動給特殊的 css 屬性名稱增加前綴, 比如 transform 。
無需再加前綴屬性!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章