<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
<template> <div> <el-table stripe class="jx-table" :data="tableData" border ref="table" style="width: 100%"> <el-table-column prop="firstColumn" :label="firstColLabel" :resizable="false"></el-table-column> <el-table-column prop="date" label="時間" :resizable="false"></el-table-column> <el-table-column prop="name" label="姓名" :resizable="false"></el-table-column> <el-table-column prop="province" label="地點" :resizable="false"></el-table-column> </el-table> </div> </template>
<script> import { map } from "lodash"; export default { created() { this.init(); }, data() { return { fullTableData: [], firstColLabel: "", tableFoot: [], allDate: { TabData: { result: [ { date: "2016-05-02", name: "王小虎", province: "上海", firstColumn: 1 }, { date: "2016-05-04", name: "王小虎", province: "上海", title: 12 }, { date: "2016-05-01", name: "王小虎", province: "上海", title: 123 }, { date: "2016-05-03", name: "王小虎", province: "上海", title: 124 } ], avg: { date: "---", name: "--", province: "-" }, count: { date: "_", name: "__", province: "___" } }, csNick: "標題" } }; }, methods: { init() { const { result, avg, count } = this.allDate.TabData; this.fullTableData = map(result, (object, key) => { return { firstColumn: object.title, ...object }; }); count.firstColumn = "彙總"; avg.firstColumn = "均值"; this.tableFoot = [count, avg]; this.firstColLabel = this.allDate.csNick; } }, computed: { tableData() { const tbody = this.fullTableData; return tbody.length ? [...tbody, ...this.tableFoot] : []; } } }; </script>
<style lang="scss" scoped> </style>
效果圖如下:
簡單介紹下專案:後端管理系統,頁面樣式用的是 element,資料繫結用的是 vue.js。
功能需求:需要新增繳藥記錄,這些記錄要顯示在一個 table 中,但是 table 末尾一行不做資料展示,只負責觸發資料新增的動作。
紅框處就是自定義的表尾,選擇藥品處的下拉框,每當選中一個藥品的時候,當前 table 就多出一行選中過的藥品資訊。
由於用到 element 的 table 標籤,所以 table 的渲染,取決於 data 屬性的值(tablelist),程式碼如下
<el-table style="width: 1040px" :data="tablelist" border> <el-table-column prop="drugName" label="藥品名稱" min-width="20%"> </el-table-column> <el-table-column prop="unit" label="用藥規格" min-width="20%"> </el-table-column> <el-table-column prop="stock" label="庫存數量(本人)" min-width="20%"> </el-table-column> <el-table-column prop="number" label="繳存數量" min-width="20%"> </el-table-column> </el-table>
一開始的思路是,tablelist 中預製一條資料,然後做狀態標識。當渲染 table 行的時候,根據狀態標識,判斷該行到底是新增上的資料,還是要觸發新增操作的表尾。然後按照這個思路執行的結果是:
然後反思,發現原因。每次新增,都往 tablelist 陣列後面新增一個元素,導致本來應該是表尾的那一行,跑到了上面。那繼續解決問題,我想到了對 tablelist 排序,然後讓表尾那一行每次排在陣列最後一個位置。雖然實現了,但是弊端也很大。
先看程式碼
<el-table style="width: 1040px" :data="tablelist.concat([{drugId:0}])" border> <el-table-column prop="drugName" label="藥品名稱" min-width="20%"> </el-table-column> <el-table-column prop="unit" label="用藥規格" min-width="20%"> </el-table-column> <el-table-column prop="stock" label="庫存數量(本人)" min-width="20%"> </el-table-column> <el-table-column prop="number" label="繳存數量" min-width="20%"> </el-table-column> </el-table>
首先,為了保證儲存頁面資料的時候,處理邏輯簡單,只讓 tablelist 儲存需要提交到後臺的資料。那麼 table 表格末尾那一行的資料,怎麼渲染上呢。在給 table 的 data 屬性賦值的時候,呼叫 tablelist 的 concat(),方法。給 tablelist 再新增一個陣列,該陣列只有一個元素,就是用來渲染表尾的元素。這樣就保證了提交到後臺資料準確性,table 行資料排列的準確性以及表尾行始終固定。
小結一下:其實解決的方法很簡單。第一,由於是表尾和其他行有區別,而且我們的業務邏輯是表尾資料不提交,所以想到兩部分資料要做資料隔離。第二,table 渲染的時候,又需要兩部分資料是一個整體,所以想到集合的相加。
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45