一樣的話語不ㄧ樣的口吻說,就會差很多很多好嗎!?
昨天我們利用 Vue.js 的v-
系列指令,馬上就做了一個很實用的計數器,有沒感覺 Vue 的好?只要熟悉了這一系列的指令,就可以做出一些實用的功能,真的很方便!
今天我們要介紹的是和「顯示切換」、「屬性綁定」相關的v-show
, v-if
,v-bind
,這就來一一介紹。
v-show
用來根據表達值的布林值true
或false
來切換元素的顯示和隱藏。無論v-show
的值是什麼,最終都會被解析成布林值,當然,表達式也會解析成布林值。
控制顯示的原理是修改元素 CSS 的 display 屬性,當v-show
的值為false
時,會自動加上display:none
來隱藏元素。反之,true
為顯示。而當實例中的數據資料改變之後,對應的元素的狀態也會自動同步更新。
v-if
和v-show
相同,都是根據表達式或布林值被解析成true
或false
來切換元素的顯示和隱藏。語法可以直接在標籤上給v-if
布林值或是表達式,或是依據實例中data
所對應的屬性解析得到的布林值來控制。
和v-show
的效果雖然相同,但不同的是v-if
切換元素的顯示與隱藏的方式,不是操錯元素的 CSS 樣式,而是直接操縱 Dom 元素。表達式的值如果是true
,元素就會在 Dom 的樹狀結構中,false
則會從 Dom 的樹狀結構中整個移除。
在實際的專案裡,如果元素必須時常切換,建議可以使用v-show
來作切換,反之則用v-if
。因為v-if
是控制 Dom,比較耗效能,所以用v-show
會比較省效能些。
先來看一下Codepen的範例
我們希望在點擊按鈕時可以切換顯示或隱藏圖片,因為會頻繁地切換,所以使用v-show
,以v-on
綁定點擊時觸發得方法changeShow
,在實例中的changeShow
方法以邏輯運算子!
來切換。
或是,我們也可以在v-show
上面給表達式做判斷,例如,如果到達 18 歲,才能顯示圖片等等。
HTML 的部分
<div id="app">
<input type="button" value="switch show" v-on:click="changeShow" /><img
v-show="isShow"
src="https://cn.vuejs.org/images/logo.png"
/>
<hr />
<p>{{age}}</p>
<input type="button" value="Add age" v-on:click="addAge" />
<img v-show="age==18" src="https://cn.vuejs.org/images/logo.png" />
</div>
JavaScript 的部分
const app = new Vue({
el: '#app',
data: {
isShow: false,
age: 16,
},
methods: {
changeShow: function () {
this.isShow = !this.isShow;
},
addAge: function () {
this.age++;
},
},
});
在 HTML 的元素標籤裡,會有許多這個元素的屬性,例如連結的src
、圖片文字titre
、或樣式的class
。我們可以針對每一個屬性來進行綁定,綁定的語法為v-bind:屬性名=表達式
。
例如想要綁定一張圖片的連結,可以在圖片標籤的src
做綁定,並且屬性值指定是 Vue 實例裡 Data 的屬性對應,如下面範例:
在titre
我們也可以拼接內容,或是以三元運算表達式,但建議以「物件」」的方式寫,在實例裡寫邏輯的部分會比較清楚。
v-bind
允許另ㄧ種較簡潔的寫法,以:
雙冒號取代v-bind
,v-bind:src="imgSrc"
可以直接寫成:src="imgSrc"
。
HTML 的部分
<style>
.active{ border: 1px solid red; }
</style>
<div id="app">
<img v-bind:src="imgSrc">
<img v-bind:titre="imgTitre + '!!' ">
<!-- 三元表達式的寫法/不建議 -->
<img :class="isActive?'active':'' " :title="imgTitre" @click="toggleStyle">
<!-- 以物件的方式寫法 -->
<img :class="{active:isActive}">
<input type="button" value="change Style" @click="toggleStyle"/>
</div>
javascript 的部分
const vm = new Vue({
el: '#app',
data: {
msgSrc: 'www.google.com/images/logo.png',
imgTitre: 'Hello google',
isActive: false,
},
methods: {
toggleStyle: function () {
this.isActive = !this.isActive;
},
},
});
每日一句法文有益身心:Salut ! --> 沙.旅! 嗨!或是嘿!熟朋友打招呼用。