登錄請(qǐng)求

表單校驗(yàn)

通過(guò)Element中Form組件的表單驗(yàn)證功能進(jìn)行驗(yàn)證
功能中需要使用的屬性

  • 需要給<el-form>綁定的屬性:
    • model:綁定表單數(shù)據(jù)的對(duì)象
    • rules:表單驗(yàn)證對(duì)象,內(nèi)部的屬性名對(duì)應(yīng)要驗(yàn)證的<el-form-item>的prop(屬性設(shè)置為數(shù)組传轰,內(nèi)部可以同時(shí)制定多條規(guī)則)
      • required:是否必選
      • message:驗(yàn)證失敗的提示信息
      • trigger:觸發(fā)方式塘幅,比如bulr就是焦點(diǎn)時(shí)觸發(fā)校驗(yàn)
      • max:最大長(zhǎng)度
      • min:最小長(zhǎng)度
      • pattern:驗(yàn)證的正則規(guī)則
  • 給要進(jìn)行驗(yàn)證的<el-form-item>設(shè)置的屬性
    • prop:對(duì)應(yīng)model中的哪個(gè)屬性
      首先在data中聲明rules規(guī)則對(duì)象
// login/index.vue
data () {
  return {
    form: {
      phone: '',
      password: ''
    },
        // 規(guī)則對(duì)象
    rules: {}
  }
},

<el-form>設(shè)置屬性啦吧,指定數(shù)據(jù)對(duì)象form與規(guī)則對(duì)象rules

// login/index.vue
<el-form
  label-position="top"
  :model="form"
  :rules="rules"
  label-width="80px"
>

<el-form-item>設(shè)置prop指定名稱,記得要設(shè)置為<el-form-item>的屬性哦

// login/index.vue
<el-form-item label="手機(jī)號(hào)" prop="phone">
  <el-input v-model="form.phone"></el-input>
</el-form-item>
<el-form-item label="密碼" prop="password">
  <el-input type="password" v-model="form.password"></el-input>
</el-form-item>

在rules中設(shè)置手機(jī)號(hào)和密碼的驗(yàn)證規(guī)則

 // 用于設(shè)置表單校驗(yàn)規(guī)則
      rules: {
        phone: [
          { required: true, message: '請(qǐng)輸入手機(jī)號(hào)', trigger: 'blur' },
          { pattern: /^1\d{10}$/, message: '請(qǐng)輸入正確的手機(jī)號(hào)', trigger: 'blur' }
        ],
        password: [
          { required: true, message: '請(qǐng)輸入手機(jī)號(hào)', trigger: 'blur' },
          { min: 6, max: 18, message: '密碼長(zhǎng)度為6-18位', trigger: 'blur' }
        ]
      }

設(shè)置完畢之后琼牧,可以發(fā)現(xiàn),無(wú)論驗(yàn)證的結(jié)果是什么樣的,控制臺(tái)打印驗(yàn)證結(jié)果是都可以發(fā)送請(qǐng)求的喜爷,所以應(yīng)該根據(jù)驗(yàn)證結(jié)果進(jìn)行響應(yīng)的處理

  • 在onSubmit中對(duì)表單校驗(yàn)結(jié)果進(jìn)行判斷
    • <el-form>添加ref屬性,以便在onSubmit中通過(guò)this.$refs訪問(elementUI設(shè)置就自帶了萄唇,這里只是提個(gè)醒)
    // login/index.vue
    <el-form
    label-position="top"
    ref="form"   // 添加 ref
    :model="form"
    :rules="rules"
    label-width="80px"
    >
    
    • 通過(guò)Form組件的驗(yàn)證方法validate()進(jìn)行處理
// Element 文檔示例:validate 傳入回調(diào)函數(shù)的參數(shù)1為驗(yàn)證結(jié)果檩帐,布爾類型
this.$refs[formName].validate((valid) => {
  if (valid) {
    alert('submit!');
  } else {
    console.log('error submit!!');
    return false;
  }
})

validate()不傳入回調(diào),就會(huì)返回promise穷绵,可以通過(guò)ES6的await處理轿塔,同時(shí)通過(guò)測(cè)試后發(fā)現(xiàn),如果沒有通過(guò)校驗(yàn)仲墨,會(huì)出現(xiàn)異常勾缭,可以通過(guò)try...catch處理,方便提示出錯(cuò)誤的信息

  • try 中設(shè)置常規(guī)的代碼
  • catch 中可以選擇設(shè)置驗(yàn)證失敗提示
// 登錄功能
    async onSubmit () {
      try {
        // 校驗(yàn)成功后的功能
        await this.$refs.form.validate()
        console.log('通過(guò)校驗(yàn)')
      } catch (err) {
        // 校驗(yàn)失敗后的功能
        console.log('校驗(yàn)未通過(guò)')
      }
    }

登錄請(qǐng)求

引入請(qǐng)求模塊request

import request from '@/utils/request'

提交時(shí)發(fā)送請(qǐng)求:

// 登錄功能
    async onSubmit () {
      try {
        // 校驗(yàn)成功后的功能
        await this.$refs.form.validate()
        // 發(fā)送請(qǐng)求
        request({
          method: 'POST',
          url: '/front/user/login',
          data: {
            phone: this.form.phone,
            password: this.form.password
          }
        })
      } catch (err) {
        // 校驗(yàn)失敗后的功能
        console.log('校驗(yàn)未通過(guò)')
      }
    }

由于axios的請(qǐng)求參數(shù)默認(rèn)為application/json格式目养,而這次我們的接口需要x-www-form-urlencoded格式俩由,導(dǎo)致了請(qǐng)求參數(shù)失敗



這個(gè)時(shí)候我們需要根據(jù)接口需要將axios的請(qǐng)求參數(shù)格式進(jìn)行轉(zhuǎn)換,操作方式可以在axios文檔中查看癌蚁。這里我們需要的是使用qs模塊進(jìn)行處理幻梯,首先安裝qs模塊

npm i qs

引入qs模塊

import qs from 'qs'

使用qs模塊處理請(qǐng)求參數(shù)格式

// 發(fā)送請(qǐng)求
        request({
          method: 'POST',
          // header可以省略兜畸,qs.stringify()自動(dòng)設(shè)置
          url: '/front/user/login',
          // urlencoded格式:名=值$名=值...
          data: qs.stringify(this.form)
        })
成功

請(qǐng)求結(jié)果處理
根據(jù)接口文檔中提供的自定義狀態(tài)碼判斷,除了1和200是成功碘梢,其他都是失敗

  • 成功后跳轉(zhuǎn)到首頁(yè)/home
    • 使用$router.push()編程式導(dǎo)航方法
  • 失敗時(shí)進(jìn)行提示
    通過(guò)ElementUI的message消息提示組件進(jìn)行了錯(cuò)誤提示美化
    Element除了提供組件之后咬摇,還給Vue實(shí)例提供了一些方法,通過(guò)方法可以出發(fā)一些功能
    • 這里我們使用了message組件中的$message.error()$message.success()
// 校驗(yàn)成功后的功能
        await this.$refs.form.validate()
        // 發(fā)送請(qǐng)求
        // {}解構(gòu)對(duì)象內(nèi)的data
        const { data } = await request({
          method: 'POST',
          // header可以省略煞躬,qs.stringify()自動(dòng)設(shè)置
          url: '/front/user/login',
          // urlencoded格式:名=值$名=值...
          data: qs.stringify(this.form)
        })
        // 響應(yīng)處理
        if (data.state === 1) {
          this.$router.push({
            name: 'home'
          })
          this.$message.success('登陸成功')
        } else {
          this.$message.error('登錄失敗')
        }

避免重復(fù)請(qǐng)求

當(dāng)請(qǐng)求速度較慢時(shí)肛鹏,如果多次點(diǎn)擊登錄按鈕會(huì)導(dǎo)致重復(fù)觸發(fā)請(qǐng)求,沒有絲毫的意義


  • 在請(qǐng)求期間禁用登錄按鈕點(diǎn)擊事件
  • 通過(guò)Element中Button組件的加載中功能設(shè)置就可以了
// Element 文檔示例代碼
<el-button type="primary" :loading="true">加載中</el-button>

給登錄按鈕設(shè)置:loading屬性恩沛,并且綁定布爾值控制

// login/index.vue
<el-button
  type="primary"
  :loading="isLoginLoading"
  @click="onSubmit"
>登錄</el-button>

在data聲明一個(gè)isLoginLoading變量

      // 用于保存加載狀態(tài)
      isLoginLoading: false

穿插到onSubmit方法中

// 校驗(yàn)成功后的功能
        await this.$refs.form.validate()
        // 發(fā)送請(qǐng)求
        // 按鈕不可再按
        this.isLoginLoading = true
        // {}解構(gòu)對(duì)象內(nèi)的data
        const { data } = await request({
          method: 'POST',
          // header可以省略在扰,qs.stringify()自動(dòng)設(shè)置
          url: '/front/user/login',
          // urlencoded格式:名=值$名=值...
          data: qs.stringify(this.form)
        })
        // 請(qǐng)求處理完畢之后恢復(fù)到可以再按按鈕
        this.isLoginLoading = false
        // 響應(yīng)處理
        if (data.state === 1) {
          this.$router.push({
            name: 'home'
          })
          this.$message.success('登陸成功')
        } else {
          this.$message.error(data.message)
        }

封裝請(qǐng)求方法

在services目錄下創(chuàng)建user.js,封裝用戶請(qǐng)求的功能模塊
對(duì)用戶登錄接口的請(qǐng)求進(jìn)行封裝:

// serveices/user.js
import request from '@/utils/request'
import qs from 'qs'

// 登錄接口
export const login = data => {
  return request({
    method: 'POST',
    url: '/front/user/login',
    data: qs.stringify(data)
  })
}

在登錄頁(yè)面引入封裝模塊并且調(diào)用方法



封裝成功雷客,測(cè)試也沒有問題芒珠,以后就可以將所有的接口請(qǐng)求都封裝到模塊中就行了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市搅裙,隨后出現(xiàn)的幾起案子皱卓,更是在濱河造成了極大的恐慌,老刑警劉巖呈宇,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件好爬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡甥啄,警方通過(guò)查閱死者的電腦和手機(jī)存炮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蜈漓,“玉大人穆桂,你說(shuō)我怎么就攤上這事∪谒洌” “怎么了享完?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)有额。 經(jīng)常有香客問我般又,道長(zhǎng),這世上最難降的妖魔是什么巍佑? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任茴迁,我火速辦了婚禮,結(jié)果婚禮上萤衰,老公的妹妹穿的比我還像新娘堕义。我一直安慰自己,他們只是感情好脆栋,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布倦卖。 她就那樣靜靜地躺著洒擦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪怕膛。 梳的紋絲不亂的頭發(fā)上熟嫩,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音嘉竟,去河邊找鬼邦危。 笑死,一個(gè)胖子當(dāng)著我的面吹牛舍扰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播希坚,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼边苹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了裁僧?” 一聲冷哼從身側(cè)響起个束,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎聊疲,沒想到半個(gè)月后茬底,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡获洲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年阱表,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贡珊。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡最爬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出门岔,到底是詐尸還是另有隱情爱致,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布寒随,位于F島的核電站糠悯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏妻往。R本人自食惡果不足惜互艾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蒲讯。 院中可真熱鬧忘朝,春花似錦、人聲如沸判帮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至悦昵,卻和暖如春肴茄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背但指。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工寡痰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人棋凳。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓拦坠,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親剩岳。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贞滨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容