###### tags:`Vue` # 4.Vue v-if 模板判斷 1. <kbd>v-if</kbd> 搭配 <kbd>v-else</kbd>使用切換物件呈現,與三種寫法之一 2. <kbd>v-if</kbd> 搭配 <kbd>v-else</kbd>三種寫法(2)(3) 3. 使用<kbd> v-else-if </kbd>做分頁頁籤 4. <kbd>v-if</kbd>和<kbd>v-show</kbd>差異 ### 1.<kbd>v-if</kbd> 搭配 <kbd>v-else</kbd>使用切換物件呈現,與三種寫法之一 ``` <div id="app"> <div class="alert alert-success col-6" v-if="isSuccess == true">成功</div> <div class="alert alert-danger col-6" v-if="isSuccess == false"> 失敗</div> <div class="form-group form-check ml-3" > <input type="checkbox" class="form-check-input" id="isSuccess" v-model="isSuccess"> <label class="form-check-label" for="isSuccess">Check me out</label> </div> </div> var app = new Vue({ el: '#app', data: { isSuccess: 'true', } }) ``` ### 2-1 <kbd>v-if</kbd> 搭配 <kbd>v-else</kbd>三種寫法(2) 為了使寫法更精簡 可以參考以下寫法 使用<kbd>!</kbd>**驚嘆號**,表反面意思. ``` <div class="alert alert-success col-6" v-if="open">成功</div> <div class="alert alert-danger col-6" v-if="!open"> 失敗</div> <div class="form-group form-check ml-3" > <input type="checkbox" class="form-check-input" id="open" v-model="open"> <label class="form-check-label" for="isSuccess2">Check me out</label> </div> var app = new Vue({ el: '#app', data: { open: 'true', } }) ``` ### 2-1 <kbd>v-if</kbd> 搭配 <kbd>v-else</kbd>三種寫法(3) ``` <div class="alert alert-success col-6" v-if="light">成功</div> <div class="alert alert-danger col-6" v-else > 失敗</div> <div class="form-group form-check ml-3" > <input type="checkbox" class="form-check-input" id="light" v-model="light"> <label class="form-check-label" for="light">Check me out</label> </div> var app = new Vue({ el: '#app', data: { light:'true' } }); ``` ### 3.使用v-else-if做分頁頁籤 此部分使用<kbd>v-on:some_method </kbd> ( 簡寫<kbd>@some_method</kbd> ) 、 <Kbd>@click.prevent</Kbd>、<Kbd>v-bind:class="{ active: isActive }</Kbd> 1.nav 綁定 click, <kbd>v-on:click"link='a'"</kbd> 依序把三個頁面標示完成. 2.在JS data 預設 <kbd>link: 'a',</kbd> 3.在HTML裡的content部分標上<kbd>v-if="link == 'a' "</kbd>其他頁面標示<kbd>v-else-if="link =='b'"</kbd>等等依序把其他頁面標完成.[v-else&v-else-if差別](https://cn.vuejs.org/v2/api/#v-else-if),網路上和我所買的六角教學影片都沒有講得太清楚.老師說<kbd>v-else-if</kbd>條件認定比較模糊,多個要判斷,搭配<kbd>v-if</kbd>會依序判斷.不管<kbd>v-else</kbd>或是<kbd>v-else-if</kbd>都要放在<kbd>v-if</kbd>後面才能跑得動. 4.最好在nav標籤上補上class條件,<kbd>v-bind:class="{'active':link == 'a' }"</kbd>依序把其他標籤完成. ``` <div id="app"> <ul class="nav nav-tabs"> <li class="nav-item"> <a class="nav-link" href="#" @click.prevent="link = 'a' " v-bind:class="{'active':link == 'a' }">標題一</a> </li> <li class="nav-item"> <a class="nav-link" href="#" @click.prevent="link = 'b' " v-bind:class="{'active':link == 'b' }">標題二</a> </li> <li class="nav-item"> <a class="nav-link" href="#" @click.prevent="link = 'c' " v-bind:class="{'active':link == 'c' }">標題三</a> </li> </ul> <div class="content"> <div v-if="link == 'a' ">A</div> <div v-else-if="link =='b'">B</div> <div v-else-if="link =='c'">C</div> </div> </div> <script> var app = new Vue({ el: '#app', data: { link: 'a', }, }); </script> ``` ### <kbd>v-if</kbd>和<kbd>v-show</kbd>差異 <kbd>v-show</kbd>是透過<kbd>display:none</kbd>方式隱藏Dom元素, 而<kbd>v-if</kbd>是將Dom元素移除掉.