Vue+elementUI實現動態展示列表的數據
Vue elementUI動態展示列表的數據
需求描述
活動查看的時候,根據後臺返回的數據,動態渲染列和每行數據。
後臺返回的數據結構如下
html
<!-- 彈出的查看數據 --> <el-dialog width="1200px" :title="activityName" :visible.sync="viewDataPopUp" > <div class="export"> <el-button type="primary" @click="exportData">導出數據</el-button> </div> <el-table border style="width: 100%" :data="resultTable" id="table"> <!-- 循環問題與答案 --> <el-table-column :label="item.label" :prop="item.prop" v-for="(item, key) in result" :key="key" > </el-table-column> </el-table> </el-dialog>
data定義需要用到的字段
activitySettingPopUp: false, //活動設置彈窗 activityData: [], //查看活動數據 // answer: [], // tableAnswer: [], resultTable: [], //查看數據處理後的數據 result: [], //查看數據用於循環的數據 activityName: "", //查看數據的活動名稱
調接口,成功後,將data.answers的值賦值給activityData.
if (res.status_code === 200) { console.log(res); this.activityName = res.data.active_name; this.activityData = res.data.answers; this.result = this.getCol(this.activityData); this.resultTable = this.getTable(this.activityData); }
getCol方法獲取需要循環的列label和值prop
getCol(src) { let col = []; // for (let i = 0; i < src.length; i++) { for (let j in src[0]) { if (j === "answer") { let str = src[0][j]; let str2obj = JSON.parse(str); for (let k in str2obj) { col.push({ prop: k, label: str2obj[k]["title"], }); } } else { col.push({ prop: j, label: src[0][j].title, }); } } // } return col; },
獲取表格的數據
getTable(src) { let table = []; for (let i = 0; i < src.length; i++) { let temp = {}; for (let j in src[i]) { if (j == "answer") { let obj = JSON.parse(src[i][j]); for (let k in obj) { temp[k] = obj[k].value; } } else { temp[j] = src[i][j].value; } } table.push(temp); } return table; },
Vue elementUI註意事項
多選框對應List<object>
<el-select v-model="addOrEdit.obj" clearable multiple collapse-tags filterable value-key="id" style="width: 100%"> <el-option v-for="item in objList" :key="item.id" :label="item.name" :value="item"></el-option></el-select>
1.el-select標簽
這個標簽裡對應的就是後臺發過來的數據格式
如果後臺發來的數據是List<String>,即["1", "2", "3"]這種格式,則這個標簽裡value-key="id"就可以不用加瞭,重點在於el-option標簽的key與其對應就可以瞭
如果後臺數據是List<object>,即[{"id": "1", "name": "一"}, {"id": "2", "name": "二"}, {"id": "3", "name": "三"}]這種格式,那麼就要加上value-key="id",將list<object> 裡的對象的key與el-option裡的objList的key對應
2.el-option標簽
key
,就是用來用來作為標識對應的label
,就是用來前端展示內容的value
,是選完之後向後端傳遞數據的,如果填的是item.id那麼傳出的數據就隻有id的數組,如果是item的話會將整個結構傳出
輸入框判斷條件
1.格式判斷
隻能輸入數字和兩位小數
rules: { num: { pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/, message: '請輸入正確額格式,可保留兩位小數' } }
隻能輸入數字
可以直接在el-input 標簽內加上 οnkeyup="value=value.replace(/[^\d]/g,'')" 即可
2.使用方法加入輸入框格式判斷數字和兩位小數
入參key即為addOrEdit這個數組裡面的字段名
在el-input 標簽內加入:change="check_price('name')"即可
check_price(key) { var price = '' + this.addOrEdit[key]; price = price .replace(/[^\d.]/g, '') // 清除“數字”和“.”以外的字符 .replace(/\.{2,}/g, '.') // 隻保留第一個. 清除多餘的 .replace(/^\./g, '') //保證第一個為數字而不是. .replace('.', '$#$') .replace(/\./g, '') .replace('$#$', '.') .replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3'); // 隻能輸入兩個小數 if (price.indexOf('.') < 0 && price != '') { // 以上已經過濾,此處控制的是如果沒有小數點,首位不能為類似於 01、02的金額 price = parseFloat(price); } this.$set(this.addOrEdit, key, price); },
3.提交判斷
即使加上以上判斷後輸入框提示瞭,但是如果提交的處理沒進行判斷的話還是可以提交而導致後端出錯。
所以當點擊提交時,應將下面的addOrEdit替換為所需數組名稱,如果通過再執行提交的邏輯
this.$refs['addOrEdit'].validate((valid) => { if (valid) { //執行邏輯 } }
自定義彈窗格式
1.const h = this.$createElement;
新建一個html內容的容器
2.this.$msgbox({}).then(() => {}).catch((err) => {});
用來新建一個彈窗
handleDelete(row) { const h = this.$createElement; this.$msgbox({ title: '刪除', showCancelButton: true, confirmButtonText: '確定', cancelButtonText: '取消', iconClass: 'el-icon-circle-close', customClass: 'mes-width', message: h('div', { class: 'mr1' }, [h('p', { class: 'mes-d' }, '確定要刪除此項嗎?')]) }) .then(() => { deleteRule(row.id) .then((res) => { if (res.data.code === '1') { this.$message({ type: 'success', message: '執行成功!' }); this.getRuleList(); } }) .catch((err) => { this.$message({ type: 'warning', message: err }); }); }) .catch((err) => {}); },
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- vue+elementUI下拉框回顯問題及解決方式
- VUE多個下拉框實現雙向聯動效果
- Vue+ElementUI實現從後臺動態填充下拉框的示例代碼
- vue element-ui動態橫向統計表格的實現
- vue.js基於ElementUI封裝瞭CRUD的彈框組件