欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

手把手教你uniapp和uview2.0實(shí)現(xiàn)表單校驗(yàn)實(shí)戰(zhàn)

 更新時間:2023年05月08日 11:18:56   作者:賣柴火的小伙子  
表單提交對大家來說應(yīng)該都不陌生,這是個很常見的功能,這篇文章主要給大家介紹了關(guān)于手把手教你uniapp和uview2.0實(shí)現(xiàn)表單校驗(yàn)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

表單提交是很常見的功能,本文基于uniapp+uview2.0實(shí)現(xiàn)表單常見屬性校驗(yàn)處理,使用到組件有u–form、Form-item,基本使用說明如下:

u–form

此組件一般是用于表單驗(yàn)證使用,每一個表單域由一個u-form-item組成,表單域中可以放置u-input、u-checkbox、u-radio、u-switch等。

在表單組中,通過model參數(shù)綁定一個對象,這個對象的屬性為各個u-form-item內(nèi)組件的對應(yīng)變量。
由于表單驗(yàn)證和綁定表單規(guī)則時,需要通過ref操作,故這里需要給form組件聲明ref="form1"屬性。
關(guān)于u-from-item內(nèi)其他可能包含的諸如input、radio等組件,請見各自組件的相關(guān)文檔說明。

u-form-item

此組件一般需要搭配Form組件使用,也可以單獨(dú)搭配Input等組件使用,由于此組件參數(shù)較多,這里只對其中參數(shù)最簡要介紹,其余請見底部的API說明:

prop為傳入Form組件的model中的屬性字段,如果需要表單驗(yàn)證,此屬性是必填的。
labelPosition可以配置左側(cè)"label"的對齊方式,可選為left和top。
borderBottom是否顯示表單域的下劃線,如果給Input組件配置了邊框,可以將此屬性設(shè)置為false,從而隱藏默認(rèn)的下劃線。
如果想在表單域配置左右的圖標(biāo)或小圖片,可以通過leftIcon和rightIcon參數(shù)實(shí)現(xiàn)。

下面結(jié)合簡單的demo介紹一下基本使用,現(xiàn)在有一個用戶信息表單信息,包含基本的用戶昵稱、頭像、生日、簡介信息,現(xiàn)在需要對各字段進(jìn)行校驗(yàn)。點(diǎn)擊提交時都為空時的異常提示信息如下圖:

代碼內(nèi)容:

<template>
	<view>
		<!-- 注意,如果需要兼容微信小程序,最好通過setRules方法設(shè)置rules規(guī)則 -->
		<u--form labelPosition="left" :model="model1" :rules="rules" ref="form1">
			<u-form-item label="昵稱" prop="userInfo.userName" borderBottom ref="item1">
				<u--input v-model="model1.userInfo.userName" border="none"></u--input>
			</u-form-item>
			<u-form-item label="頭像" prop="userInfo.userImg" borderBottom ref="item1">
				<u-avatar :src="model1.userInfo.userImg" shape="circle" v-model="model1.userInfo.userImg"
					@click="chooseTheImg()"></u-avatar>
			</u-form-item>
			<u-form-item label="性別" prop="userInfo.gender" borderBottom @click="showGender = true; hideKeyboard()"
				ref="item1">
				<u--input v-model="model1.userInfo.gender" disabled disabledColor="#ffffff" placeholder="請選擇性別"
					border="none"></u--input>
				<u-icon slot="right" name="arrow-right"></u-icon>
			</u-form-item>
			<u-form-item label="生日" prop="userInfo.birthday" borderBottom @click="showBirthday = true; hideKeyboard()"
				ref="item1">
				<u--input v-model="model1.userInfo.birthday" disabled disabledColor="#ffffff" placeholder="請選擇生日"
					border="none"></u--input>
				<u-icon slot="right" name="arrow-right"></u-icon>
			</u-form-item>
			<u-form-item label="簡介" prop="userInfo.intro" borderBottom ref="item3">
				<u--textarea placeholder="不低于3個字" v-model="model1.userInfo.intro" count></u--textarea>
			</u-form-item>
		</u--form>
		<u-button @click="submit">提交</u-button>
		<u-action-sheet :show="showGender" :actions="actions" title="請選擇性別" description="如果選擇保密會報(bào)錯"
			@close="showGender = false;genderClose()" @select="genderSelect()">
		</u-action-sheet>
		<u-datetime-picker :show="showBirthday" :value="birthday" mode="date" closeOnClickOverlay
			@confirm="birthdayConfirm" @cancel="birthdayClose" @close="birthdayClose"></u-datetime-picker>
	</view>

</template>

<script>
	export default {
		data() {
			return {
				showGender: false, // 是否顯示性別選擇
				showBirthday: false, // 是否展示生日選擇
				model1: {
					userInfo: {
						userName: 'uView UI',
						gender: '',
						userImg: '/static/logo.png',
						birthday: '',
						intro: '',
					}
				},
				actions: [{
						name: '男',
					},
					{
						name: '女',
					},
					{
						name: '保密',
					}

				],
				rules: {
					'userInfo.userName': {
						type: 'string',
						required: true,
						message: '請?zhí)顚戧欠Q',
						trigger: ['blur', 'change']
					},
					'userInfo.gender': {
						type: 'string',
						max: 1,
						required: true,
						message: '請選擇男或女',
						trigger: ['blur', 'change']
					},
					'userInfo.userImg': {
						type: 'string',
						required: true,
						message: '請上傳頭像',
						trigger: ['blur', 'change']
					},
					'userInfo.birthday': {
						type: 'string',
						required: true,
						message: '請選擇生日',
						trigger: ['change']
					},
					'userInfo.intro': {
						type: 'string',
						required: true,
						message: '請?zhí)顚懞喗?,
						trigger: ['change']
					}
				},
				radio: '',
				switchVal: false
			};
		},
		methods: {
			// 隱藏鍵盤
			hideKeyboard() {
				uni.hideKeyboard()
			},
			//選擇圖片
			chooseTheImg() {
				uni.chooseImage({
					count: 1, //圖片可選擇數(shù)量
					sizeType: ['original', 'compressed'], //original 原圖,compressed 壓縮圖,默認(rèn)二者都有
					sourceType: ['album', 'camera', '海報(bào)圖庫'], //album 從相冊選圖,camera 使用相機(jī),默認(rèn)二者都有。
					success: res => {
						let imgFiles = res.tempFilePaths //圖片的本地文件路徑列表
						console.log('本地地址', imgFiles)
						this.uploadTheImg(imgFiles)
					}
				})
			},
			//上傳圖片
			uploadTheImg(imgFiles) {
				uni.uploadFile({
					url: `XXXXXX`, //后端用于處理圖片并返回圖片地址的接口
					header: {
						"Content-Type": "multipart/form-data", // formdata提交格式
					},
					filePath: imgFiles[0],
					name: 'uploadfile', // 默認(rèn)
					formData: { // 其他的formdata參數(shù)
						fileType: '2',
						uid: '10001',
						fileContainerName: 'default'
					},
					success: res => {
						let data = JSON.parse(res.data) //返回的是字符串,需要轉(zhuǎn)成對象格式,打印data如下圖
						if (data.code == 200) {
							console.log(data.msg) //圖片地址
						}
					},
					fail: () => {}
				})
			},
			// 顯示性別列表并校驗(yàn)性別是否為那女
			genderSelect(e) {
				this.model1.userInfo.gender = e.name
				this.$refs.form1.validateField('userInfo.gender')
				// 校驗(yàn)頭像是否上傳
				// this.$refs.form1.validateField('userInfo.userImg')
			},
			// 性別選擇關(guān)閉,校驗(yàn)是否選擇性別
			genderClose() {
				this.$refs.form1.validateField('userInfo.gender')
			},
			// 生日選擇關(guān)閉時校驗(yàn)生日格式以及是否為空
			birthdayConfirm(e) {
				this.showBirthday = false
				this.model1.userInfo.birthday = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
				this.$refs.form1.validateField('userInfo.birthday')
			},
			// 生日列表關(guān)閉時校驗(yàn)是否為空			
			birthdayClose() {
				this.showBirthday = false
				this.$refs.form1.validateField('userInfo.birthday')
			},
			submit() {
				this.$refs.form1.validate().then(res => {
					console.log("提交表單信息:" + JSON.stringify(this.model1.userInfo))
					// uni.$u.toast('校驗(yàn)通過')
					// 調(diào)用服務(wù)端入表接口
				}).catch(errors => {
					console.log("失敗信息:" + JSON.stringify(errors))
					// uni.$u.toast('校驗(yàn)失敗')
				})
			}
		},
		onReady() {
			//如果需要兼容微信小程序,并且校驗(yàn)規(guī)則中含有方法等,只能通過setRules方法設(shè)置規(guī)則。
			this.$refs.form1.setRules(this.rules)
		}

	};
</script>

<style lang="scss">

</style>

    規(guī)則說明:
    校驗(yàn)規(guī)則需要從u--form組件中指定規(guī)則名,此處為rules,data屬性中rules用于定義表單各個屬性的校驗(yàn)內(nèi)容如下:

trigger{String | Array}:觸發(fā)校驗(yàn)的方式有2種:

change:字段值發(fā)生變化時校驗(yàn) blur:輸入框失去焦點(diǎn)時觸發(fā) 如果同時監(jiān)聽兩種方式,需要寫成數(shù)組形式:[‘change’,
‘blur’] type{String}
內(nèi)置校驗(yàn)規(guī)則,如這些規(guī)則無法滿足需求,可以使用正則匹配、或者使用validator自定義方法并結(jié)合uView自帶驗(yàn)證規(guī)則。

string:必須是 string 類型,默認(rèn)類型 number:必須是 number 類型 boolean:必須是 boolean 類型
method:必須是 function 類型 regexp:必須是 regexp
類型,這里的正則,指的是判斷字段的內(nèi)容是否一個正則表達(dá)式,而不是用這個正則去匹配字段值 integer:必須是整數(shù)類型
float:必須是浮點(diǎn)數(shù)類型 array:必須是 array 類型 object:必須是 object 類型 enum:必須出現(xiàn)在 enmu
指定的值中 date:必須是 date 類型 url:必須是 url 類型 hex:必須是 16 進(jìn)制類型 email:必須是 email
類型 any:任意類型 required
布爾值,是否必填,配置此參數(shù)不會顯示輸入框左邊的必填星號,如需要,請配置u-form-item的required為true,注意:如需在swiper標(biāo)簽內(nèi)顯示星號,需要給予swiper-item第一個根節(jié)點(diǎn)一定的margin樣式

pattern 要求此參數(shù)值為一個正則表達(dá)式,如: /\d+/,不能帶引號,如:“/\d+/”,組件會對字段進(jìn)行正則判斷,返回結(jié)果。

min 最小值,如果字段類型為字符串和數(shù)組,會取字符串長度與數(shù)組長度(length)與min比較,如果字段是數(shù)值,則直接與min比較。

max 最大值,規(guī)則同min參數(shù)

len 指定長度,規(guī)則同min,優(yōu)先級高于min和max

enum{Array} 指定的值,配合 type: ‘enum’ 使用

whitespace{Boolean} 如果字段值內(nèi)容都為空格,默認(rèn)無法通過required:
true校驗(yàn),如果要允許通過,需要將此參數(shù)設(shè)置為true

transform{Function},校驗(yàn)前對值進(jìn)行轉(zhuǎn)換,函數(shù)的參數(shù)為當(dāng)前值,返回值為改變后的值,參數(shù)如如下:

value:當(dāng)前校驗(yàn)字段的值 message 校驗(yàn)不通過時的提示信息

validator{Function}:自定義同步校驗(yàn)函數(shù),參數(shù)如下:

rule:當(dāng)前校驗(yàn)字段在 rules 中所對應(yīng)的校驗(yàn)規(guī)則 value:當(dāng)前校驗(yàn)字段的值
callback:校驗(yàn)完成時的回調(diào),一般無需執(zhí)行callback,返回true(校驗(yàn)通過)或者false(校驗(yàn)失敗)即可
asyncValidator{Function}:自定義異步校驗(yàn)函數(shù),參數(shù)如下:

rule:當(dāng)前校驗(yàn)字段在 rules 中所對應(yīng)的校驗(yàn)規(guī)則 value:當(dāng)前校驗(yàn)字段的值
callback:校驗(yàn)完成時的回調(diào),執(zhí)行完異步操作(比如向后端請求數(shù)據(jù)驗(yàn)證),如果不通過,需要callback(new
Error(‘提示錯誤信息’)),如果校驗(yàn)通過,執(zhí)行callback()即可

    this.$refs.form1.validateField('userInfo.gender')用于執(zhí)行表單字段的校驗(yàn)處理;

    this.$refs.form1.validate()用于執(zhí)行表單提交時各個字段的校驗(yàn)處理;

補(bǔ)充:

from表單中input與左邊的lable距離過大問題處理方式:直接修改u-form-item中的label-width即可;另外u-input中如果想添加邊框,可以使用customStyle屬性,添加示例:

<u-input  placeholder="請輸入密碼" customStyle="border: 5rpx solid #36373d;border-radius: 20rpx;"></u-input>

附:uview表單校驗(yàn)使用的坑

我們在使用uview的時候有些表單項(xiàng)是不允許用戶修改的,對應(yīng)input綁定的數(shù)據(jù)是用戶點(diǎn)擊選擇框獲得的,所以我們在input上寫了disabled屬性來禁用輸入框,但是禁用之后無法觸發(fā)表單校驗(yàn)的change以及blur,當(dāng)表單校驗(yàn)不通過,即使后面我們的數(shù)據(jù)是通過驗(yàn)證的但是提示消息依然存在,雖然可以通過表單驗(yàn)證,但是造成用戶體驗(yàn)不好。后面我在想不使用disabled使用readonly但是發(fā)現(xiàn)uniapp不支持這個屬性。

photo: [
          {
            // 自定義驗(yàn)證函數(shù),見上說明
            validator: (rule, value, callback) => {
              if (this.form.imgUrl) {
                return true
              }
              if (!this.form.imgUrl) {
                return false
              }
            },
            message: '請選擇圖片',
            // 觸發(fā)器可以同時用blur和change
            trigger: ['blur', 'change'],
          },
        ],

以上校驗(yàn)規(guī)則無法觸發(fā)觸發(fā)器,只有調(diào)用表單校驗(yàn)方法的時候提示才會消失

我的解決思路,不在表單校驗(yàn)上述表單項(xiàng),在用戶點(diǎn)擊提交的時候自己寫方法判斷,要是判斷不通過則彈框提示

官方參考鏈接:https://www.uviewui.com/components/form.html

總結(jié)

到此這篇關(guān)于uniapp和uview2.0實(shí)現(xiàn)表單校驗(yàn)實(shí)戰(zhàn)的文章就介紹到這了,更多相關(guān)uniapp和uview2.0表單校驗(yàn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 前端判斷頁面是在PC端還是移動端打開四種方法

    前端判斷頁面是在PC端還是移動端打開四種方法

    本文介紹幾種在前端開發(fā)中用于判斷用戶設(shè)備類型(PC端或移動端)的方法,包括使用navigator.userAgent、媒體查詢、第三方庫detect.js和Vue框架插件vue-device-detect,這些方法有助于在開發(fā)中處理設(shè)備適配和頁面權(quán)限問題,需要的朋友可以參考下
    2024-10-10
  • Node+OCR實(shí)現(xiàn)圖像文字識別功能

    Node+OCR實(shí)現(xiàn)圖像文字識別功能

    這篇文章主要為大家詳細(xì)介紹了Node+OCR實(shí)現(xiàn)圖像文字識別功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • js調(diào)用后臺、后臺調(diào)用前臺等方法總結(jié)

    js調(diào)用后臺、后臺調(diào)用前臺等方法總結(jié)

    這篇文章主要對js調(diào)用后臺,后臺調(diào)用前臺等方法做個總結(jié),需要的朋友可以參考下
    2014-04-04
  • 詳解可以用在VS Code中的正則表達(dá)式小技巧

    詳解可以用在VS Code中的正則表達(dá)式小技巧

    這篇文章主要介紹了詳解可以用在VS Code中的正則表達(dá)式小技巧,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 深入理解js promise chain

    深入理解js promise chain

    下面小編就為大家?guī)硪黄钊肜斫鈐s promise chain。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • JS中artdialog彈出框控件之提交表單思路詳解

    JS中artdialog彈出框控件之提交表單思路詳解

    artDialog是一個基于javascript編寫的對話框組件,它擁有精致的界面與友好的接口。本文給大家介紹JS中artdialog彈出框控件之提交表單思路詳解,對本文感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04
  • JavaScript知識點(diǎn)總結(jié)(十一)之js中的Object類詳解

    JavaScript知識點(diǎn)總結(jié)(十一)之js中的Object類詳解

    這篇文章主要介紹了JavaScript知識點(diǎn)總結(jié)(十一)之js中的Object類詳解的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • JavaScript中數(shù)組遍歷方法合集大全

    JavaScript中數(shù)組遍歷方法合集大全

    在JavaScript中數(shù)組遍歷是常見的操作,有多種方法可以實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于JavaScript中數(shù)組遍歷方法合集的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • Javascript地址引用代碼實(shí)例解析

    Javascript地址引用代碼實(shí)例解析

    這篇文章主要介紹了Javascript地址引用代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • bootstrap選項(xiàng)卡擴(kuò)展功能詳解

    bootstrap選項(xiàng)卡擴(kuò)展功能詳解

    這篇文章主要為大家詳細(xì)介紹了bootstrap選項(xiàng)卡擴(kuò)展功能,增加關(guān)閉,超出一行顯示下拉,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06

最新評論