iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 8
1
Modern Web

學習 vue 30天系列 第 8

Vue 08 v-for 動態產生多筆資料到畫面上及 v-if 判斷使用

  • 分享至 

  • xImage
  •  

我們在寫 vue 應用程式的時候它 data 這個屬性裡面是可以放 Json、陣列、物件等等的資料結構,通常這些資料結構都會很常用到 for loopif statement 來做資料的存取及篩選等等的應用,vue 裡面有兩個語法就是 v-forv-if,跟我們所知道的迴圈及判斷是一樣的概念,今天就來學學怎麼用這兩個語法吧!

我們先把 vue 應用程式建起來:

<div id="app">

</div>

<script>
    var app = new Vue({
        el: '#app',
        data: {
            list: [{
                name: '麥克滑司機',
                age: 16
            }, {
                name: '鄧不麗君',
                age: 38,
            }, {
                name: '波克比',
                age: 24
            }]
        }
    })
</script>

再來存檔打開 dev tool 看看裡面會長怎麼樣吧!

https://ithelp.ithome.com.tw/upload/images/20190902/20109609sxSNgyWwsZ.png

可以看到裡面成功的有了物件們,那我們先呈現到畫面上來看看吧!

這邊用 <pre> 這個標籤來把畫面呈現出來看看吧!!!

<div id="app">
    <pre>{{ list }}</pre>
</div>

<script>
    var app = new Vue({
        el: '#app',
        data: {
            list: [{
                name: '麥克滑司機',
                age: 16
            }, {
                name: '鄧不麗君',
                age: 38,
            }, {
                name: '波克比',
                age: 24
            }]
        }
    })
</script>

https://ithelp.ithome.com.tw/upload/images/20190902/20109609KkExyzyNE7.png

好的資料可以正確無誤的呈現在畫面上以及撰寫 vue 都是沒問題的。
那我們用 ul li 來把每一筆資料的名字呈現出來,這邊就可以用看看今天的主角之一 v-for 來試試看畫面如何:

<div id="app">
    <ul>
        <li v-for="item in list">
            {{item.name}} 年齡是 {{item.age}} 歲
        </li>
    </ul>
</div>

<script>
    var app = new Vue({
        el: '#app',
        data: {
            list: [{
                name: '麥克滑司機',
                age: 16
            }, {
                name: '鄧不麗君',
                age: 38,
            }, {
                name: '波克比',
                age: 24
            }]
        }
    })
</script>

https://ithelp.ithome.com.tw/upload/images/20190902/20109609ksDbUF6f9s.png

我以前新增一筆資料在畫面上的時候都是用 innerHTML ,選擇在某個父元素之下然後用迴圈逐一加入,但這邊看到 v-for 是寫在要加入的子節點上,而且 v-for 的用法其實是跟 for each 比較像。

說到 for each 有時候會需要各個值的 index ,如果要取得該筆資料的 index 的話 for each 裡面可以多加個參數(這邊 index 有加 1 所以會從 1 開始):

<div id="app">
    <ul>
         <li v-for="(item,index) in list">
            {{index + 1}} - {{item.name}} 年齡是 {{item.age}} 歲
        </li>
    </ul>
</div>

<script>
    var app = new Vue({
        el: '#app',
        data: {
            list: [{
                name: '麥克滑司機',
                age: 16
            }, {
                name: '鄧不麗君',
                age: 38,
            }, {
                name: '波克比',
                age: 24
            }]
        }
    })
</script>

https://ithelp.ithome.com.tw/upload/images/20190902/20109609VDD3O5xFv5.png

接下來是是 v-if 我們可以用這個例子來過濾出我們限定的年齡,它會回傳 truefasle 來判斷要不要渲染畫面,所以我們在 li 上寫 v-if

<div id="app">
    <ul>
         <li v-for="(item,index) in list" v-if="item.age > 20">
            {{index + 1}} - {{item.name}} 年齡是 {{item.age}} 歲
        </li>
    </ul>
</div>

<script>
    var app = new Vue({
        el: '#app',
        data: {
            list: [{
                name: '麥克滑司機',
                age: 16
            }, {
                name: '鄧不麗君',
                age: 38,
            }, {
                name: '波克比',
                age: 24
            }]
        }
    })
</script>

https://ithelp.ithome.com.tw/upload/images/20190902/20109609XkZqLUr1Un.png


上一篇
Vue 07 v-bind 動態屬性指令
下一篇
Vue 09 使用 v-on 來操作頁面行為
系列文
學習 vue 30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言