Vue.js動(dòng)態(tài)添加、刪除選題的實(shí)例代碼
大家先看看頁面效果吧,當(dāng)當(dāng)當(dāng)當(dāng)```````````````````````
圖中第二個(gè)選題是小穎點(diǎn)擊了"新增選題"按鈕,然后出來的,當(dāng)你點(diǎn)擊了"刪除選項(xiàng)"或"刪除選題"按鈕,就會(huì)刪除相應(yīng)的選項(xiàng)和選題.
html代碼
<template> <div class="main-container"> <div class="form-horizontal"> <template v-for='(subjectIndex,subject) in question'> <div class="form-group"> <label class="col-sm-1 control-label">選題:</label> <label class="col-sm-2 control-label red remove-pad" v-if='$index>0' @click='deleteSubjectFun(subjectIndex)'>刪除選題</label> </div> <div class="form-group"> <label class="col-sm-1 control-label">標(biāo)題:</label> <div class="col-sm-2"> <input type="text" class="form-control" placeholder="未填寫" v-model='subject.title'> </div> </div> <div class="form-group"> <label class="col-sm-1 control-label">正確答案:</label> <div class="col-sm-1"> <input type="text" class="form-control answer" placeholder="未填寫" readonly="true" v-model='subject.answer'> </div> <span class="prompting-message">請?jiān)谝韵逻x項(xiàng)中,勾選出正確答案</span> </div> <div class="form-group"> <label class="col-sm-1 control-label">分值:</label> <div class="col-sm-1"> <input type="number" min="1" max="100" class="form-control" v-model='subject.score' @keyup='scoreFun(subjectIndex)'> </div> </div> <div class="form-group"> <label class="col-sm-1 control-label">選項(xiàng):</label> </div> <div class="form-group"> <div class="col-sm-3 mg1"> <ul class="upper-latin"> <template v-for='(opdtIndex,opdt) in subject.optionsData'> <li> <input type="checkbox" class="checkbox-answer" v-model='subject.answer' value='{{opdt.id}}'> <div class="options-div"> <input type="text" class="form-control options-input" placeholder="未填寫" v-model='opdt.options'> <label class="control-label blue remove-pad" v-if='opdtIndex==subject.optionsData.length-1' @click='addNewOptionsFun(subjectIndex,opdtIndex)'>新增選項(xiàng)</label> <label class="control-label red remove-pad" v-if='opdtIndex>0' @click='deleteOptionsFun(subjectIndex,opdtIndex)'>刪除選項(xiàng)</label> </div> </li> </template> </ul> </div> </div> <div class="form-group"> <div class="col-sm-offset-1 col-sm-4"> <button class="blue boder" @click='addNewSubjectFun(subjectIndex)'>新增選題</button> </div> </div> <div class='split-line'></div> </template> <div class="form-group"> <div class="col-sm-offset-1 col-sm-4"> <button class="btn btn-primary" @click='saveQuestionFun'>提交</button> </div> </div> </div> </div> </template>
js代碼
<script> export default { components: { }, props: {}, methods: { // 新增選題 addNewSubjectFun: function(index) { var subjectDataMes = {}; subjectDataMes.id = index+2; subjectDataMes.title = ''; subjectDataMes.answer =[]; subjectDataMes.score = 10; subjectDataMes.optionsData = [{ id: 'A', options: '' }]; this.question.push(subjectDataMes); }, // 判斷每個(gè)題目的分值不能小于零且不能大于一百 scoreFun:function(index){ if(this.question[index].score<0){ this.question[index].score=10; this.$root.tipStr = '選題"'+this.question[index].title+'"的分值不能小于零'; }else if(this.question[index].score>100){ this.question[index].score=10; this.$root.tipStr = '選題"'+this.question[index].title+'"的分值不能大于一百'; } }, // 刪除選題 deleteSubjectFun: function(index) { this.question.splice(index, 1); }, // 新增選項(xiàng) addNewOptionsFun: function(subjectIndex, opdtIndex) { var optionsDataMes = {}; optionsDataMes.id =String.fromCharCode(64 + (opdtIndex+2)); //將id從數(shù)字轉(zhuǎn)換成大寫字母. optionsDataMes.options = ''; var subjectDataMes = this.question[subjectIndex].optionsData; subjectDataMes.push(optionsDataMes); }, // 刪除選項(xiàng) deleteOptionsFun: function(subjectIndex, opdtIndex) { var subjectDataMes = this.question[subjectIndex].optionsData; subjectDataMes.splice(opdtIndex, 1); }, saveQuestionFun:function(){ this.question;debugger; } }, ready: function() { }, data() { return { question: [{ id: 1, title: '', answer: [], score:10, optionsData: [{ id: 'A', options: '' }], }], } } } </script>
css代碼
<style scoped> .mg1 { padding: 8px 0 0 113px; } .upper-latin { list-style-type: upper-latin; } input.form-control.options-input { display: inline-block; /*width: 499.16px;*/ width: 100%; } .boder { border: 1px solid; background-color: #fff; border-radius: 4px; line-height: 34px; padding: 0 15px; } .blue { color: #2689cd; text-align: center; } label.red { color: #c9302c; } label.remove-pad { /*padding: 10px 20px 10px 15px;*/ line-height: 34px; text-align: left; } .split-line { height: 10px; border-top: 2px dashed #E7E8EC; width: 900px; } .prompting-message { line-height: 34px; } .options-div { margin-left: 26px; margin-top: -25px; padding-bottom: 25px; } </style>
以上所述是小編給大家介紹的Vue.js動(dòng)態(tài)添加、刪除選題的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
詳解vue 在移動(dòng)端體驗(yàn)上的優(yōu)化解決方案
這篇文章主要介紹了vue 在移動(dòng)端體驗(yàn)上的優(yōu)化解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05vue3+vite使用vite-plugin-svg-icons插件顯示本地svg圖標(biāo)的方法
這篇文章主要介紹了vue3+vite使用vite-plugin-svg-icons插件顯示本地svg圖標(biāo)的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-12-12vue3.0 Reactive數(shù)據(jù)更新頁面沒有刷新的問題
這篇文章主要介紹了vue3.0 Reactive數(shù)據(jù)更新頁面沒有刷新的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-04-04Vue3?實(shí)現(xiàn)驗(yàn)證碼倒計(jì)時(shí)功能
這篇文章主要介紹了Vue3?實(shí)現(xiàn)驗(yàn)證碼倒計(jì)時(shí)功能,倒計(jì)時(shí)的運(yùn)用場景是獲取手機(jī)驗(yàn)證碼倒計(jì)時(shí)、獲取郵箱驗(yàn)證碼倒計(jì)時(shí)等場景,本文結(jié)合示例代碼給大家詳細(xì)講解,需要的朋友可以參考下2023-01-01Vue3監(jiān)聽store中數(shù)據(jù)變化的三種方式
這篇文章給大家介紹了Vue3監(jiān)聽store中數(shù)據(jù)變化的三種方法,使用watch和storeToRefs函數(shù),使用計(jì)算屬性computed和使用watchEffect函數(shù)這三種方法,文中通過代碼講解非常詳細(xì),需要的朋友可以參考下2024-01-01