---
# System prepended metadata

title: Day04 新增列表資料
tags: [Vue]

---

# Day04 新增列表資料

###### tags: `Vue` 

<style>

.red{
color:red
}
</style>

我們要做一個把所以資料渲染出來列表,並且可以再自行使用input新增。

![](https://i.imgur.com/auBe2va.jpg)

先將html版面切好後,item 元件只要保留一個做為綁定vue使用,其餘靠
vue渲染出來。

### data準備

```
 let data = {


  menu: [
   { type: '觀念理解', title: 'Day 01 jQuery vs Vue ', link: 'javascript:;' },
   { type: '表單功能', title: 'Day 02  Vue slider ', link: 'javascript:;' },
                .
                .
                .
                ]
```

```
 let app = new Vue({
            el: '#app',
            data: data,

        })
```

### html 模板綁定

#### 資料迴圈render
多筆資料render我們使用<kbd>v-for="item in data"</kbd>，在我們的範例裡面為<kbd>v-for="item in menu"</kbd>，因為我們要渲染資料有編號 ,而<kbd>v-for=""</kbd>可以是<kbd>(item ,Xnumber) in data</kbd>,
我們範例使用<kbd>v-for="(item , index) in menu"</kbd>

#### 資料編號render綁定
因為在html模板最外層我們已經包了<kbd>v-for="(item , index) in menu"</kbd>,在編號子曾綁上<kbd>{{index + 1}}</kbd>,index第一個是0,所以所有都要+1

#### catalog分類綁定
<kbd>{{item.type}}</kbd>

#### 課程標題綁定
<kbd>{{item.title}}</kbd>


```
   <div class="row datalist ml-0 mt-5 ">
                <div class="col-55  libg mx-2 my-3 vue-list d-flex" v-for="(item , index) in menu" >
                    <div class="nolist ml-n2 pt-2 pl-2">{{index + 1}}</div>
                    <div class="catolog ml-n1 pt-2">{{item.type}}</div>
                    <a class="pl-2 letter-sp-1 text-decoration-none dark-g vue-title pt-2" 
      target="vue-iron ">{{item.title}}</a>

   </div>

 </div>
```

### 綁定select & input 的資料綁定data

到Js data部分處理 , 我們這裡給他在資料庫名字input

```
 let data = {

            input: {
                    type:'全部',
                    title:''
            },

}
```


#### select綁定data
<kbd> v-model="input.type"</kbd>
注意,在data裡面如果type是空值
![](https://i.imgur.com/I8XSk82.jpg)

渲染出來選單,上方顯示會是白色沒有任何文字

![](https://i.imgur.com/fBb1TTX.jpg)

#### input綁定data

以此類推input是<kbd>v-model="input.title"</kbd>
而通常,input輸入文字要小心頭尾空白,所以直接在<kbd>v-model</kbd>後面加<kbd>.trim</kbd>

`v-model.trim="input.title"`


### 綁定input enter事件 - input type輸入文字按下enter畫面新增資料

<p class='red'>
注意:包住下拉選單和input type不得回 <kbd><form></form></kbd> ,
否則畫面渲染不出來
</p>

到input去使用<kbd>@keyup.enter=""</kbd>新增一個enter監聽function事件
`@keyup.enter="inpuHandler"`

到js的new Vue 新增一個<kbd>methods</kbd>,進行function撰寫 .

```
let vm = new Vue({
            el: '#app',
            data: data,
            methods: {
                inpuHandler() {
                    if (this.input.title) {
                        this.menu.push({
                            type: this.input.type,
                            title: this.input.title,
                            link: 'javascript:;'

                        })

                        this.input.title = ''
                    }

                }
            }

        })
```

按下enter後 , 如果 this.input.title 則 this.menu push資料 , 依造menu資料type、title、link寫資料push 。最後記得要把輸入框裡面this.input.title資料清空 ,不然按enter送出後 ,文字還會存在input輸入框裡

[Day04 新增列表資料原始碼參考](https://jsfiddle.net/Harrmonia/bc1rhkwn/2/)

*參考網路資訊*
[[ Vue.js 手牽手，一起嗑光全家桶 ] 開胃餐點 - 使用者輸入焗列表呈現](https://www.youtube.com/watch?v=_Mx_YW8Nd3A&list=PLEfh-m_KG4dYor8h4Hi2lqKJ0xqNTFh16&index=6)
 
*講師個人頻道資料很豐富,情況允許大家多多看完影片廣告,和每個月訂閱扣款donate,當做請講師喝杯咖啡犒賞辛苦無私 
