好久不見呀,這兩年寫了很多很多東西,也學到很多很多東西,沒有時常分享是因為大多都是我獨自思考。明年我想出去與更多的大神交流,再修築自己構建的內容。
有時候我會想:我們遇到的問題,碰到的界限,是別人給的還是我們自己給的?其實我覺得自己選擇的方向是對的,但是有時難免會懷疑,是否有人和我在做一樣的事情,我希望找到有趣的伙伴,做一些有趣的事情。
Vue 中數據流組件
又將年終了,該做年終總結了呀。。最近花了一些時間,升級了一下我們的技術架構,使用 vue 作為我們的框架。延續傳統,我們仍然需要開發一些 java , 所以將 vue 項目集成進了 springboo, 實現了一些便利的如協作開發前后端,命令編譯,簡潔的打包部署, router 和 axios 交互問題。寫了一個項目示例,有興趣的可以了解(歡迎 start 呀!): Vue + SpringBoot 項目示例。
引子: 最近寫了一個項目,設計了一些基礎組件。在開發過程中,也發現了一些最初沒有想到的,但可以作為基礎組件使用的內容。而數據流剛好就是其中一個。因為很早之前寫過一個,只不過那個是原生的,這個使用了 vue 和 elementUI, scss。
重要提示
1. 技術的提升,並沒有意味着 UI 的提升,所以我很抱歉,比起之前沒有更好看。所以你們使用要先找UI優化樣式。又一次嘆息,UI的重要性。沒有一個好的UI伙伴,在只關注美的人看來,一身武功,自降7分。以后要結識一個呀!
2. 因為之前寫過,所以興致來了就又寫了一下基於 vue 的實現。
功能
1. 樣式增加了主題設置,目前只有日志和報警,可以擴展主題(比較簡單就可以實現擴展)。
2. 增加了日志分類,如時間,級別,概要(比較簡單可以擴展為你所需要的)。
代碼才是最重要的吧
<template> <div> <div :id="theme" class="stream-wrapper"> <el-table :data="table.data" stripe show-summary sum-text="統計" :summary-method="getSummaries" height="100%" style="width: 100%; max-height: 100%"> <el-table-column v-for="item in layout" :prop="item.key" :label="item.value" :key="item.key" ></el-table-column> </el-table> </div> <!-- 測試按鈕 --> <div> <el-row> <el-button type="primary" @click="addOne">增加一條</el-button> </el-row> </div> </div> </template> <script> // 數據流組件: 開發過程中增加的組件,作為數據流展示的基礎組件 // 內容: // 展示數據流 // // 類型: // 我使用的類型共有 2 中, log, warn 。 可以根據需要增加,只需要改變樣式即可。 // // props: // theme, maxLength, layout, info, // /// TODO: 同樣需要UI進行設計呀。。。 import 'element-ui/lib/theme-chalk/base.css'; // 測試數據 const baseData = '《為你我受冷風吹》,為你我受冷風吹 寂寞時候流眼淚,有人問我是與非 說是與非,可是誰又真的關心誰,若是愛已不可為,明白說吧 無所謂,不必給我安慰 何必怕我傷悲,就當我從此收起真情 誰也不給,我會試着放下往事,管他過去有多美,也會試着不去想起,你如何用愛將我包圍,那深情的滋味,但願我會就此放下往事,忘了過去有多美,不盼緣盡仍留慈悲,雖然我曾經這樣以為,我真的這樣以為'; const data = baseData.split(','); // 支持主題,可擴展 const themes = ['log', 'warn']; export default { props: { // 主題 theme: { default: 'log', validate(val) { return themes.indexOf(val) > -1; } }, // 保留最大長度 maxLength: { default: 100, type: Number, validate(val) { return val > 0; } }, // 每條日志的分類,以及表格布局。 layout: { default(){ return [{ key: 'date', value: '日期', width: '40', }, { key: 'level', value: '級別', width: '10', }, { key: 'main', value: '主要內容', width: '50', }, { key: 'info', value: '詳細信息', width: '100', }]; }, type: Array, validate(val) { val.every((val) => { return val.hasOwnProperty('key') && val.hasOwnProperty('value') && val.hasOwnProperty('width'); }); }, }, // 統計信息說明詞語 info: { default(){ return { contentSpan: '日志', }; }, validate(val) { return themes.indexOf(val.contentSpan) > -1; }, }, }, name: 'DataStream', data() { return { table: { data: [], }, }; }, methods: { // 增加一條信息 addOne(){ const vm = this; let index = vm.table.data.length; if(index === data.length) return; if(vm.table.data.length === vm.maxLength){ vm.table.data.length.pop(); } vm.table.data.unshift({ date: new Date().toLocaleString(), level: ['Info', 'Warn', 'Error'][Math.floor(Math.random()*3)], main: '我是提要', info: data[index], }); }, // 日志統計信息 getSummaries(param) { return ['統計: ', `目前共有 ${param.data.length} 條${this.info.contentSpan}信息`]; }, }, }; </script> <style lang="scss" scoped> .stream-wrapper { margin: 10px 1%; padding: 2px; width: 98%; height: 500px; border: 1px solid #000000; border-radius: 4px; } // 日志 主題樣式 #log { background: #dbf4fc; color: #000; & /deep/ td { background: #fff; } & /deep/ th, & /deep/ .el-table__footer-wrapper td { background: #d4ece2; color: #2a2ad2; } } // 報警 主題樣式 #warn { background: #e60909; color: #e60909; & /deep/ td { background: #a99f9f; color: #e60909; } & /deep/ th, & /deep/ .el-table__footer-wrapper td{ background: #eae2d1; color: #0d483f; } } </style>
示例 (是不是很丑。。。)
好了,我這個前端沒什么美感。。。堅守基礎的航線,堅持自己的方向,不想撤退。
你們可以隨便在各種地方使用,不過若要發布在網上或者轉載的話請注上原文地址:
作者:鐵柱成針
原文地址:http://www.cnblogs.com/zgh-blog/p/jsDataStreamShown.html