動態新增資料with連動下拉選單(vue.js)
by cactus77kiki
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.0/axios.min.js"></script>
<div id="app">
<h3>動態新增資料with連動下拉選單(vue.js)</h3>
<h5>(註:[新增]=新增一筆資料列,[刪除]=刪除最尾資料列)</h5>
<br/>
<button type="button" v-on:click="addrow">增加</button>
<button type="button" v-on:click="delrow">減少</button><br/><br/>
<!--{{attrlist}}<br/>-->
<div v-for="(inforow,infoindex) in attrlist">
<select v-model="inforow.selectedClass"
v-on:change="changeClass($event,infoindex)">
<option v-for="(row,index) in classlist"
v-bind:value="row.id">
{{row.name}}
</option>
</select>
<select v-model="inforow.selectedCode">
<option v-for="(row,index) in inforow.dataCode"
v-bind:value="row.id">
{{row.name}}
</option>
</select>
</div>
</div>
JavaScript
//選單1
var countylist = [
{"id":"A", "name":"台北市"},
{"id":"B", "name":"桃園市"},
{"id":"C", "name":"新北市"}
];
//連動選單
var zonelist = [
{"id":"001","name":"松山區","cat":"A"},
{"id":"002","name":"中山區","cat":"A"},
{"id":"003","name":"中正區","cat":"A"},
{"id":"004","name":"中壢市","cat":"B"},
{"id":"005","name":"平鎮區","cat":"B"},
{"id":"006","name":"大溪鎮","cat":"B"},
{"id":"007","name":"深坑區","cat":"C"},
{"id":"008","name":"烏來區","cat":"C"},
{"id":"009","name":"平溪區","cat":"C"}
];
var vapp = new Vue({
el:'#app',
data:{
attrlist:[], //資料清單
classlist: [], //選單1資料
optiondefault:[{"id":"","name":"請選擇"}], //預設資料
attrInput:{ //資料列內容
"rid": "", //rowid
"selectedClass": "", //選取值
"selectedCode": "", //選取值
"dataCode": [{"id":"","name":"請選擇"}] //連動清單
},
},
methods:{
resetinfo: function(){
this.attrInput.rid="";
this.attrInput.selectedClass="";
this.attrInput.selectedCode="";
},
addrow: function(){ //新增資料
//add一筆資料
this.resetinfo();
this.attrInput.rid = this.attrlist.length+1;
//避免call by referance
var newrow = JSON.parse(JSON.stringify(this.attrInput));
this.attrlist.push(newrow);
},
delrow: function(){ //刪除資料
this.attrlist.splice(this.attrlist.length-1, 1);
},
//event.target.value 選取值. index:選取的列數
changeClass: function(event,index){
var selectedvalue = event.target.value;
//fill in連動下拉選單資料
var selectlist2 = [];
if(selectedvalue != ""){
var arry = zonelist.filter(function(item){
return item.cat == selectedvalue;
});
selectlist2 = JSON.parse(JSON.stringify(this.optiondefault));
for(var i =0;i<arry.length;i++){
selectlist2.push(arry[i]);
}
}else{
selectlist2 = JSON.parse(JSON.stringify(this.optiondefault));
}
this.attrlist[index].dataCode = selectlist2;
...