您好,登錄后才能下訂單哦!
前言
今天記錄幾個簡單的小問題,前端時間開發用到的,之前看到博客中沒有記錄,簡單記錄一下。 一個是element上傳組件循環引用的方式,一個是簡單的倒計時。
上傳組件每個上傳都要指定相應的函數,而且函數不能傳入參數,10個上傳按鈕要寫10個上傳函數,非常麻煩。針對這個,我們可以循環這些函數。
案例
element一個上傳組件如下:
<el-upload class="avatar-uploader" action="https://jsonplaceholder.typicode.com/posts/" :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload"> <img v-if="imageUrl" :src="imageUrl" class="avatar"> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload>
假如有10個上傳,豈不是要指定10個handleAvatarSuccess這個回掉函數?這些太麻煩了!!!
no! 我們可以不用這么寫。推薦的一個寫法如下:
<div class="pzsrltv" v-for="(item,index) in sValueAddedServiceData" :key="index"> <!--這一塊循環出來 --> <div class="s_step1"> <div class="stitle">{{item.name}}<span class="sblue" v-if="item.showimg" @click.stop="showImg.show = true;showImg.url = item.showimg">點擊查看示例</span> </div> <div class="one_line"> <img class="imagelist" v-if="svalueImg[item.value]" :src="`${viewUrl}${svalueImg[item.value]}`" > <el-upload v-if="!svalueImg[item.value]" class="avatar-uploader mt10" accept="image/jpeg,image/png,image/gif" :action="baseUpload" :show-file-list="false" :on-success="handlescSuccess[item.value]" :before-upload="beforeAvatarUpload"> <i class="el-icon-plus avatar-uploader-icon"></i> </el-upload> </div> </div> </div>
如上面代碼,我們直接循環上傳。
我們在data()里面指定handlescSuccess: {},
data(){ return { handlescSuccess: {}, svalueImg: {}, } }
初始化的時候,對上傳進行設置
for (let i = 1; i <= 10; i++) { //循環的個數 this.handlescSuccess[i] = function(res, file) { // console.log(res, _this.svalueImg) if (_this.svalueImg) { _this.$set(_this.svalueImg, i, res.file.sFile) } } }
上面的代碼是針對一個上傳按鈕只能上傳一張圖片的情況。上傳多種做法類似。
例如如下:
//以下代碼寫在回調里面 for (let i = 0; i < item.iNum; i++) { // 圖文視頻上傳函數 _this.handleTWSuccess[`${i}`] = function(res, file) { _this.sEvaluate['2'][i].sImg.push(res.file.sFile) } }
時間倒計時
這個實現起來很簡單,但是在vue Dom 中實時展示,要用$set方式
天,小時,分鐘,秒的倒計時函數:
data里面:
data(){ return { letTimes: { nowTime: '' }, } }
methods里面:
countDown(times) { const _this = this let timer = null timer = setInterval(function() { let day = 0, hour = 0, minute = 0, second = 0// 時間默認值 if (times > 0) { day = Math.floor(times / (60 * 60 * 24)) hour = Math.floor(times / (60 * 60)) - (day * 24) minute = Math.floor(times / 60) - (day * 24 * 60) - (hour * 60) second = Math.floor(times) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60) } if (day <= 9) day = '0' + day if (hour <= 9) hour = '0' + hour if (minute <= 9) minute = '0' + minute if (second <= 9) second = '0' + second _this.$set(_this.letTimes, 'nowTime', `${day !== '00' ? `${day}天:` : ''}${hour}小時:${minute}分鐘:${second}秒`) times-- }, 1000) if (times <= 0) { _this.$set(_this.letTimes, 'nowTime', '') clearInterval(timer) } },
單純分鐘和秒倒計時
function resetTime(time){ var timer=null; var t=time; var m=0; var s=0; m=Math.floor(t/60%60); m<10&&(m='0'+m); s=Math.floor(t%60); function countDown(){ s--; s<10&&(s='0'+s); if(s.length>=3){ s=59; m="0"+(Number(m)-1); } if(m.length>=3){ m='00'; s='00'; clearInterval(timer); } console.log(m+"分鐘"+s+"秒"); } timer=setInterval(countDown,1000); }
用法很簡單,傳秒數進來就可以了
例如:
this.countDown(5689) this.resetTime(256)
小結
簡單的小案例就分享到這里,國慶愉快,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。