<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在面向特定使用者的專案中,引 其他ui元件庫導致打包體積過大,首屏載入緩慢,還需要根據UI設計師設計的樣式,重寫大量的樣式覆蓋引入的元件庫的樣式。因此嘗試自己封裝一個自己的元件,程式碼參考了好多前輩的文章
<template> <div class="digital_upload"> <input style="display: none" @change="addFile" :multiple="multiple" type="file" :name="name" :id="id" :accept="accept" /> <label :for="id"> <slot></slot> </label> </div> </template> <script> export default { name: 'my-upload', props: { name: String, action: { type: String, required: true }, fileList: { type: Array, default () { return [] } }, accept: { type: String, require: true }, id: { type: String, default: 'my-upload' }, data: Object, multiple: Boolean, limit: Number, onChange: Function, onBefore: Function, onProgress: Function, onSuccess: Function, onFailed: Function, onFinished: Function }, methods: { // input的 chang事件處理方法 addFile ({ target: { files } }) { // input標籤觸發onchange事件時,將檔案加入待上傳列表 for (let i = 0, l = files.length; i < l; i++) { files[i].url = URL.createObjectURL(files[i])// 建立blob地址,不然圖片怎麼展示? files[i].status = 'ready'// 開始想給檔案一個欄位表示上傳進行的步驟的,後面好像也沒去用...... } let fileList = [...this.fileList] if (this.multiple) { // 多選時,檔案全部壓如列表末尾 fileList = [...fileList, ...files] const l = fileList.length let limit = this.limit if (limit && typeof limit === 'number' && Math.ceil(limit) > 0 && l > limit) { // 有數目限制時,取後面limit個檔案 limit = Math.ceil(limit) // limit = limit > 10 ? 10 : limit; fileList = fileList.slice(l - limit) } } else { // 單選時,只取最後一個檔案。注意這裡沒寫成fileList = files;是因為files本身就有多個元素(比如選擇檔案時一下子框了一堆)時,也只要一個 fileList = [files[0]] } this.onChange(fileList)// 呼叫父元件方法,將列表快取到上一級data中的fileList屬性 }, // 移除某一個檔案 remove (index) { const fileList = [...this.fileList] if (fileList.length) { fileList.splice(index, 1) this.onChange(fileList) } }, // 檢測是否可以提交 checkIfCanUpload () { console.log(this.fileList.length) return this.fileList.length ? ((this.onBefore && this.onBefore()) || !this.onBefore) : false }, // 根據情況使用不同的提交的方法 submit () { console.log('開始提交') if (this.checkIfCanUpload()) { // console.log('開始提交2') if (this.onProgress && typeof XMLHttpRequest !== 'undefined') { this.xhrSubmit() } else { this.fetchSubmit() } } }, // fethc 提交 fetchSubmit () { const keys = Object.keys(this.data); const values = Object.values(this.data); const action = this.action const promises = this.fileList.map(each => { each.status = 'uploading' const data = new FormData() data.append(this.name || 'file', each) keys.forEach((one, index) => data.append(one, values[index])) return fetch(action, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: data }).then(res => res.text()).then(res => JSON.parse(res))// 這裡res.text()是根據返回值型別使用的,應該視情況而定 }) Promise.all(promises).then(resArray => { // 多執行緒同時開始,如果並行數有限制,可以使用同步的方式一個一個傳,這裡不再贅述。 let success = 0; let failed = 0 resArray.forEach((res, index) => { if (res.code === 1) { success++ // 統計上傳成功的個數,由索引可以知道哪些成功了 this.onSuccess(index, res) } else if (res.code === 520) { // 約定失敗的返回值是520 failed++ // 統計上傳失敗的個數,由索引可以知道哪些失敗了 this.onFailed(index, res) } }) return { success, failed } // 上傳結束,將結果傳遞到下文 }).then(this.onFinished) // 把上傳總結果返回 }, // xhr 提交 // xhrSubmit () { // const _this = this // const options = this.fileList.map((rawFile, index) => ({ // file: rawFile, // data: _this.data, // filename: _this.name || 'file', // action: _this.action, // headers: { // Authorization: window.sessionStorage.getItem('token') // }, // onProgress (e) { // _this.onProgress(index, e)// 閉包,將index存住 // }, // onSuccess (res) { // _this.onSuccess(index, res) // }, // onError (err) { // _this.onFailed(index, err) // }, // onFinished (res) { //
相關文章
<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