入門Vue有幾周時間了,學習過程也只是寫一些小demo,好比TodoList,購物車之類的,瞭解了Vue的一些基礎的特性和使用方法。恰好年後開學就想作個稍微像樣點的東西,因而就找出了16年百度前端學院的任務五十來做爲本次將要實現的項目。廢話很少說,下面看東西。前端
傳送門:任務地址git
/*問卷的check按鈕*/ <li @click="checkItem(item)"><i :class="{'checked': item.checked}"></i></li> /*全選按鈕*/ <p @click="checkAll(isCheckedAll)"><i :class="{'checked': isCheckedAll}"></i></p>
methods: { checkItem(item, flag = null) { if (typeof item.checked === 'undefined') { Vue.set(item, 'checked', true); } else if (flag !== null) { item.checked = !flag; } else { item.checked = !item.checked; } }, checkAll(flag) { this.quList.forEach( item => { this.checkItem(item, flag) }); } }, /*經過ES6的數組every方法來很方便的得知的問卷列表中所有問卷是否爲全選或非全選*/ computed: { isCheckedAll() { return this.quList.every( item => item.checked); } }
/*問卷的編輯按鈕*/ <span v-if="!item.state" @click="iterator = editItem(item); iterator.next()">編輯</span> /*提示框的選擇按鈕*/ <span @click="iterator.next(); isShowPrompt = false">肯定</span> <span @click="isShowPrompt = false">取消</span> /*經過Generator函數來控制是否要進行下一步操做*/ *editItem(item) { yield this.showPrompt(`確認要編輯《${item.title}》?`); yield this.$router.push({name: 'Edit', params: {id: item.id}}); }
/*執行提交操做時,會先調用下面的函數,來檢查用戶是否已經填寫全部必填的項目,不然return false不提交*/ requireValidate() { let textareas = document.querySelectorAll('textarea'); return [].every.call(textareas, item => { if (item.hasAttribute('required') && item.value.trim() === '') { return false; } return true; }) }
/*文本框的答案由一個字符串保存*/ <textarea v-model="item.answer"></textarea> /*單選鈕的答案是選中的選項的索引,也是由字符串保存*/ <input v-if="item.type === 'radio'" :type="item.type" @change="item.answer = optIndex"> /*複選框的答案是選中的選項的索引,由一個數組保存*/ <input v-else :type="item.type" @change="checkboxAnswer($event, optIndex, item.answer)">
編輯頁面中每一個問題的題目和選項均可以點擊後切換成input來進行修改,我用的是樣式來控制他們的顯示和隱藏,這裏由於編輯選項時會影響處處於其父級元素的題目的input的顯示,因此我在這個部分加了雙重驗證,若是隻是編輯題目就控制一項class,若是是編輯選項就要先隱藏題目的input,而後顯示出選項的input。github
......vue-router
Vue是個好東西,努力學吧。
在寫這個項目的時候確實遇到挺多問題,不過還好都一一解決了。
第一次寫文章,若是哪裏寫的很差說的很差,望各位大佬輕噴。
溜了 0.0。數組