中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用uni-app和uView實現多圖上傳功能

發布時間:2023-05-10 14:49:28 來源:億速云 閱讀:484 作者:iii 欄目:開發技術

本篇內容主要講解“怎么用uni-app和uView實現多圖上傳功能”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么用uni-app和uView實現多圖上傳功能”吧!

效果圖

上傳初始狀態:

怎么用uni-app和uView實現多圖上傳功能

上傳圖片:

怎么用uni-app和uView實現多圖上傳功能

uView Upload組件

先來認識一下uView的Upload組件。Upload組件用于圖片上傳場景。Upload組件支持如下平臺

  • APP

  • H5

  • 各家小程序

Upload組件支持手動上傳與自動上傳,可以限制圖片大小以及圖片數量。可以配置上傳前的鉤子與刪除文件前的鉤子,靈活性還是比較大的。有興趣的可以去看下相關的組件文檔,這里就不多做介紹了。

view部分

不多廢話,來到正文:

圖片上傳一般可以單獨使用,也可以跟其他form組件放在一起,示例中其他組件的使用不在本篇內容范疇內,所以一行代碼用以表示。只展示主要代碼。

<view class="container">
	<view class="font-size-16 text-9B9B9B margin-top-10">上傳圖片</view>
    <view class="text-9B9B9B">圖片寬度和高度都不能低于500像素,至少3張,最多15張!</view>
	<u-form-item label="" v-show="false" :border-bottom="false" prop="coverImage">
		<u-input v-model="form.coverImage" :disabled="false" placeholder=""></u-input>
	</u-form-item>
</view>

這段代碼定義了上傳圖片的提示文字,以及封面圖!

<view class="container padding-vertical-15">
    <view class="pre-box">
        <block v-for="(item, index) in imageList" :key="index">
            <view class="pre-item">
                <image class="pre-item-image" :src="item.url" mode="aspectFill"></image>
                <view class="u-delete-icon" @click="deleteItem(index)">
                    <u-icon name="close" size="20" color="#ffffff"></u-icon>
                </view>
                <view class="default-image-box">
                    <u-checkbox shape="circle" v-model="item.checked" labelColor="#FFFFFF" active-color="#19be6b" label-size="24" :name="index" size="24"
                     @change="setDefault(index)">設為封面</u-checkbox>
                </view>
                <view class="default-image-box-mask"></view>
            </view>
        </block>
        <view class="pre-item">
            <u-upload ref="imageUpload" :action="imageUploadUrl" :show-tips="false" :disabled="hiddImageUpload" :auto-upload="true"
            :max-count="imageMaxCount" :upload-text="imageUploadText" :show-upload-list="false" @on-success="imageUploadSuccess"
            @on-error="uploadError">
                <view slot="addBtn" class="slot-btn" hover-class="slot-btn__hover" hover-stay-time="150">
                    <u-icon name="camera" size="60" :color="$u.color['lightColor']"></u-icon>
                    <view>{{imageUploadText}}</view>
                </view>
            </u-upload>
        </view>
    </view>
</view>

這段代碼中,定義了上傳成功后的圖片預覽、以及上傳組件的展示。圖片列表里,還有設為封面的功能。

完整代碼:

<template>
    <view>
        <u-form :model="form" ref="uForm" :rules="rules" :error-type="errorType">
            <u-form-item label="表單項" label-width="160rpx" :border-bottom="true">
                        //...	
            </u-form-item>
            <!--圖片上傳-->
            <view class="container">
                <view class="font-size-16 text-9B9B9B margin-top-10">上傳圖片</view>
                <view class="text-9B9B9B">圖片寬度和高度都不能低于500像素,至少3張,最多15張!</view>
                <u-form-item label="" v-show="false" :border-bottom="false" prop="coverImage">
					<u-input v-model="form.coverImage" :disabled="false" placeholder=""></u-input>
				</u-form-item>
            </view>
            <view class="container padding-vertical-15">
                <view class="pre-box">
                    <block v-for="(item, index) in imageList" :key="index">
                        <view class="pre-item">
                            <image class="pre-item-image" :src="item.url" mode="aspectFill"></image>
                            <view class="u-delete-icon" @click="deleteItem(index)">
                                <u-icon name="close" size="20" color="#ffffff"></u-icon>
                            </view>
                            <view class="default-image-box">
								<u-checkbox shape="circle" v-model="item.checked" labelColor="#FFFFFF" active-color="#19be6b" label-size="24" :name="index" size="24"
								 @change="setDefault(index)">設為封面</u-checkbox>
							</view>
							<view class="default-image-box-mask"></view>
                        </view>
                    </block>
                    <view class="pre-item">
                        <u-upload ref="imageUpload" :action="imageUploadUrl" :show-tips="false" :disabled="hiddImageUpload" :auto-upload="true"
                        :max-count="imageMaxCount" :upload-text="imageUploadText" :show-upload-list="false" @on-success="imageUploadSuccess"
                        @on-error="uploadError">
                            <view slot="addBtn" class="slot-btn" hover-class="slot-btn__hover" hover-stay-time="150">
                                <u-icon name="camera" size="60" :color="$u.color['lightColor']"></u-icon>
                                <view>{{imageUploadText}}</view>
                            </view>
                        </u-upload>
                    </view>
                </view>
            </view>
            <!--/圖片上傳-->
            <u-form-item label="表單項" label-width="160rpx" :border-bottom="true">
                        //...	
            </u-form-item>
        </u-form>
    </view>
</template>

上傳代碼片段前后都定義了一個form-item組件,你可跟實際需要增加或者刪除就可以了。

script部分

<script>
export default{
    data(){
        return{
            //form提交表單
            form:{
                coverImage:""
            },
            rules:{},//表單校驗規則
            imageMaxCount: 10,//最多上傳多少張
			imageList: [],//上傳完成后的圖片列表
            imageUploadText: "",//上傳組件的文字
            hiddImageUpload: false,//是否隱藏上傳組件
            imageIndex: 0,//圖片索引
            imageUploadUrl: this.$settings.uploadUrl,//上傳圖片的API地址
            errorType: ['border-bottom', 'toast'],//出差提示,參考uView的form組件
        }
    },
    onReady() {
        this.$refs.uForm.setRules(this.rules);
    },
    onLoad(){
        this.initUploadText();
    },
    methods(){
        initUploadText(){
            this.imageUploadText = this.imageMaxCount - this.imageList.length + "/" + this.imageMaxCount;
			this.hiddImageUpload = (this.imageMaxCount - this.imageList.length) == 0 ? true : false;
        },
        deleteItem(index) {
            this.imageList.splice(index, 1);
            this.$refs.imageUpload.remove(index);
            this.initUploadText()
        },
        uploadError() {
            this.$u.toast('上傳失敗!');
        },
        imageUploadSuccess(data, index, lists, name) {
            let that = this;
            if (data.status == 200) {
                let itemData = data.data;
                itemData.url = itemData.url;
                itemData.index = index;
                that.imageList.push(itemData);
                that.initUploadText();
            } else {
                that.$u.toast('上傳失敗!');
            }
        },
        setDefault(index) {
            let that = this;
            that.imageList = that.imageList.map(function(item, _index, arr) {
                if (index == _index) {
                    item.checked = true;
                    that.form.coverImage = item.url;
                } else {
                    item.checked = false;
                }
                return item;
			});
		},
    }
}
</script>

data部分已經有了注釋了,不做特別說明。

上傳組件定義了ref="imageUpload",可以通過ref手動操作圖片的upload(手動上傳圖片)clear(清空內部文件列表)reUpload(重新上傳)remove(index):刪除某張圖片,index為imageList的索引。這個看實際需要,自己實現一下就可以了。

onReadythis.$refs.uForm.setRules(this.rules); 主要功能是設置表單驗證,根據實際需要自行決定,非必須的哦!

  • initUploadText:方法是設置上傳的文字,也就是那個15/15。

  • deleteItem:方法是刪除圖片列表中的某張圖片。這里就用到了ref="imageUpload"的手動方法this.$refs.imageUpload.remove(index);

  • uploadError:上傳圖片出錯的提示。

  • imageUploadSuccess:圖片上傳成功要做的一些事情。

  • setDefault:設置封面圖。

樣式

<style>
.container{padding:0 30rpx}
.font-size-16{font-size:32rpx;}
.text-9B9B9B{color:#9B9B9B}
.margin-top-10{margin-top:2orpx;}
.padding-vertical-15{padding:30rpx 0;}
.pre-box {display: flex;align-items: center;justify-content: flex-start;flex-wrap: wrap;}
.pre-item {width: 160rpx;height: 160rpx;overflow: hidden;position: relative;margin-right: 10rpx;margin-bottom: 20rpx;}
.pre-item-image {width: 100%;height: 160rpx;}
.u-delete-icon {position: absolute;top: 0rpx;right: 0rpx;z-index: 10;background-color: #fa3534;border-radius: 100rpx;width: 44rpx;height: 44rpx;display: flex;align-items: center;justify-content: center;}
.slot-btn {width: 160rpx;height: 160rpx;display: flex;justify-content: center;align-items: center;background: rgb(244, 245, 246);border-radius: 10rpx;flex-direction: column;}
.slot-btn__hover {background-color: rgb(235, 236, 238);}
</style>

到此,相信大家對“怎么用uni-app和uView實現多圖上傳功能”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浮梁县| 讷河市| 邵武市| 罗田县| 驻马店市| 宜昌市| 介休市| 舞阳县| 蚌埠市| 长葛市| 安宁市| 涿鹿县| 长寿区| 荃湾区| 德钦县| 青州市| 崇仁县| 司法| 新晃| 京山县| 阜城县| 建阳市| 辰溪县| 旬邑县| 澄江县| 同德县| 庄河市| 天水市| 红桥区| 三穗县| 开封县| 铁岭县| 曲麻莱县| 文登市| 龙南县| 屏南县| 新竹市| 湘西| 乐平市| 定州市| 威海市|