1、學前准備:
JavaScript中有一個方法:unshift() ,其作用是向數組的開頭添加一個或更多元素,並返回新的長度。該方法的第一個參數將成為數組的新元素 0,如果還有第二個參數,它將成為新的元素 1,以此類推。
2、直接上代碼
<body> <divi id="app"> 序號:<input type="text" v-model="idValue"/>  車名:<input type="text" v-model="nameValue"/>  <button v-on:click="add()">添加</button> <p v-for="item in list"> <input type="checkbox" name="car"></checkbox>序號:{{item.id }} , 車名:{{ item.name }}<br/> </p> </div> <script type="text/javascript"> var vm = new Vue({ el:"#app", data:{ idValue:'', nameValue:'', list:[ {id:1,name:'奧迪'}, {id:2,name:'寶馬'}, {id:3,name:'奔馳'}, {id:4,name:'勞斯萊斯'}, {id:5,name:'瑪莎拉蒂'} ] }, methods:{ add(){ this.list.unshift({ id : this.idValue, name : this.nameValue }); } } }) </script> </body>
這里我們定義了一個list集合,並通過在input中輸入內容,然后把新的車型添加到list集合中並顯示在頁面上。運行結果如下:
我們在第一個input框中填入數字6,第二個input框中添加保時捷車型,點擊添加按鈕,運行結果如下;
看頁面信息好像我們已經添加成功了,沒有什么問題。現在我們把序號為5的瑪莎拉蒂復選框勾上,然后再點擊添加按鈕,看看有什么現象。
What?明明勾的是瑪莎拉蒂怎么變成勞斯萊斯了!原因就在於v-for指令只能簡單的實現數據的遍歷,當你的數據發生變化的時候,由於數據和指令的唯一關聯就是遍歷時的數組下標,所以當你勾選瑪莎拉蒂的時候,指令記住了你勾選的數組下標為5(數組下標是從0開始的),當你往數組里添新元素之后,雖然數組長度變了,但是指令只記得你當時勾選的數組下標,於是就幫你把新數組中下標為5的勞斯萊斯給勾選了。為了解決這種問題,在使用v-for指令的時候我們需要加入一個新屬性:key,寫法為key="XX",其中XX必須具有唯一性,即可以通過key來識別出對應的遍歷元素。
<p v-for="item in list" v-bind:key="item.id">
<input type="checkbox" name="car"></checkbox>
序號: {{item.id }} , 車名:{{ item.name }}<br/>
</p>
這里在v-for指令里加入了key屬性,通過屬性綁定指令v-bind綁定了元素的序號,即通過序號來識別每個數組元素(當然這個時候你要保證序號不能重復,要具備唯一性,不然勾選序號重復的元素的時候還是會出現上面的問題)。這個時候再把序號為5的瑪莎拉蒂復選框勾上,然后再點擊添加按鈕,看看有什么現象。
保時捷被成功添加了,而且瑪莎拉蒂的復選框還是被選中狀態。
總結:如果你只是簡單的遍歷,那么v-for指令完全可以滿足,如果還涉及到數組數據的改變或者操作,那么就需要加上屬性key來幫助指令來識別每個遍歷元素。
每天進步一點點!