最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

u–form

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

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

u-form-item

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

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

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

代碼內容:

<template>
	<view>
		<!-- 注意,如果需要兼容微信小程序,最好通過setRules方法設置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="如果選擇保密會報錯"
			@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 壓縮圖,默認二者都有
					sourceType: ['album', 'camera', '海報圖庫'], //album 從相冊選圖,camera 使用相機,默認二者都有。
					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', // 默認
					formData: { // 其他的formdata參數(shù)
						fileType: '2',
						uid: '10001',
						fileContainerName: 'default'
					},
					success: res => {
						let data = JSON.parse(res.data) //返回的是字符串,需要轉成對象格式,打印data如下圖
						if (data.code == 200) {
							console.log(data.msg) //圖片地址
						}
					},
					fail: () => {}
				})
			},
			// 顯示性別列表并校驗性別是否為那女
			genderSelect(e) {
				this.model1.userInfo.gender = e.name
				this.$refs.form1.validateField('userInfo.gender')
				// 校驗頭像是否上傳
				// this.$refs.form1.validateField('userInfo.userImg')
			},
			// 性別選擇關閉,校驗是否選擇性別
			genderClose() {
				this.$refs.form1.validateField('userInfo.gender')
			},
			// 生日選擇關閉時校驗生日格式以及是否為空
			birthdayConfirm(e) {
				this.showBirthday = false
				this.model1.userInfo.birthday = uni.$u.timeFormat(e.value, 'yyyy-mm-dd')
				this.$refs.form1.validateField('userInfo.birthday')
			},
			// 生日列表關閉時校驗是否為空			
			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('校驗通過')
					// 調用服務端入表接口
				}).catch(errors => {
					console.log("失敗信息:" + JSON.stringify(errors))
					// uni.$u.toast('校驗失敗')
				})
			}
		},
		onReady() {
			//如果需要兼容微信小程序,并且校驗規(guī)則中含有方法等,只能通過setRules方法設置規(guī)則。
			this.$refs.form1.setRules(this.rules)
		}

	};
</script>

<style lang="scss">

</style>

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

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

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

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

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

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

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

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

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

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

transform{Function},校驗前對值進行轉換,函數(shù)的參數(shù)為當前值,返回值為改變后的值,參數(shù)如如下:

value:當前校驗字段的值 message 校驗不通過時的提示信息

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

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

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

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

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

補充:

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表單校驗使用的坑

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

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

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

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

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

總結

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

相關文章

  • js實現(xiàn)圖片區(qū)域可點擊大小隨意改變(適用移動端)代碼實例

    js實現(xiàn)圖片區(qū)域可點擊大小隨意改變(適用移動端)代碼實例

    這篇文章主要介紹了js實現(xiàn)圖片區(qū)域可點擊大小隨意改變(適用移動端)代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • js實現(xiàn)背景圖片感應鼠標變化的方法

    js實現(xiàn)背景圖片感應鼠標變化的方法

    這篇文章主要介紹了js實現(xiàn)背景圖片感應鼠標變化的方法,實例分析了javascript針對鼠標事件與css樣式圖片的操作技巧,需要的朋友可以參考下
    2015-02-02
  • javascript的防抖節(jié)流函數(shù)解析

    javascript的防抖節(jié)流函數(shù)解析

    這篇文章主要為大家介紹了javascript防抖節(jié)流函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 原生js實現(xiàn)焦點輪播圖效果

    原生js實現(xiàn)焦點輪播圖效果

    本文主要分享了原生js實現(xiàn)焦點輪播圖效果的示例代碼,并解析了實例中的注意點。具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • js+html5實現(xiàn)canvas繪制網(wǎng)頁時鐘的方法

    js+html5實現(xiàn)canvas繪制網(wǎng)頁時鐘的方法

    這篇文章主要介紹了js+html5實現(xiàn)canvas繪制網(wǎng)頁時鐘的方法,涉及html5圖形繪制的基礎技巧,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • javascript 無提示關閉窗口腳本

    javascript 無提示關閉窗口腳本

    在IE7、IE8中,使用JavaScript提供的close()方法都可以關閉當前窗口或標簽,但都提示討厭的對話框,找了下代碼,終于可以無提示直接關閉了。
    2009-08-08
  • D3.js進階系列之CSV表格文件的讀取詳解

    D3.js進階系列之CSV表格文件的讀取詳解

    D3.js支持從外部讀取數(shù)據(jù)進行圖形交互(Loading External Resources),支持的格式有CSV、txt、Html、tsv、xml文本文件和JSON XML數(shù)據(jù)結構,下面這篇文章主要給大家介紹了D3.js中CSV表格文件讀取的相關資料,需要的朋友可以參考下。
    2017-06-06
  • 萬字詳解JavaScript手寫一個Promise

    萬字詳解JavaScript手寫一個Promise

    這篇文章主要介紹了萬字詳解JavaScript手寫一個Promise,Promise就是一個類,在執(zhí)行這個類的時候,需要傳遞一個執(zhí)行器(回調函數(shù))進去,執(zhí)行器會立即執(zhí)行
    2022-07-07
  • 基于layui數(shù)據(jù)表格以及傳數(shù)據(jù)的方式

    基于layui數(shù)據(jù)表格以及傳數(shù)據(jù)的方式

    今天小編就為大家分享一篇基于layui數(shù)據(jù)表格以及傳數(shù)據(jù)的方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • JS啟動應用程序的一個簡單例子

    JS啟動應用程序的一個簡單例子

    用jscript實現(xiàn)啟動程序一個例子
    2008-05-05

最新評論

改则县| 三亚市| 枣强县| 海林市| 台北县| 民勤县| 饶平县| 永嘉县| 蚌埠市| 秭归县| 关岭| 鹤峰县| 大厂| 保康县| 郸城县| 麦盖提县| 日土县| 托克逊县| 宕昌县| 漠河县| 三河市| 美姑县| 新乡县| 双城市| 太仓市| 阿克| 富平县| 高阳县| 黔西| 禹州市| 延庆县| 昭通市| 乌恰县| 绥中县| 思南县| 滨海县| 百色市| 东乌| 弋阳县| 师宗县| 松潘县|