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

Vue實現(xiàn)動態(tài)顯示表單項填寫進度功能

 更新時間:2023年05月16日 10:23:49   作者:碼上編程  
這篇文章主要介紹了Vue實現(xiàn)動態(tài)顯示表單項填寫進度功能,此功能可以幫助用戶了解表單填寫的進度和當前狀態(tài),提高用戶體驗,通常實現(xiàn)的方式是在表單中添加進度條,根據用戶填寫狀態(tài)動態(tài)更新進度條,感興趣的同學可以參考下文

一、序言

1、業(yè)務需求

表單項填寫了,進度條就增加相應的比例,表單項未填寫,進度條就 減少相應的比例

2、目標效果

二、原理

1、如何監(jiān)測表單項是否有值,可以專門用對象存儲進度條增幅比例。如果表單項有值則存儲,沒有值則賦值為0,然后表單項使用@change事件監(jiān)聽表單項是否變化,然后調用一個公共的計算進度條的方法,這個方法去遍歷calculateIntegrityForm對象的key對應的value值,然后累加這個value值,最后賦值給進度條

form: {    // 存儲表單項的表單
    name: '',
    region: '',
    type: [],
    resource: '',
},
calculateIntegrityForm: {    // 存儲進度條比例的表單
    name: 0,
    region: 0,
    type: 0,
    resource: 0,
}
    // 監(jiān)聽特殊資源變化
    resourceChangeFn(val) {
      this.form.resource = val;
      this.updateProgress('resource', 25);
    },
    // 監(jiān)聽活動性質變化
    typeChangeFn(val) {
      this.form.type = val;
      this.updateProgress('type', 25);
    },
    // 監(jiān)聽活動區(qū)域變化
    regionChangeFn(val) {
      this.form.region = val;
      this.updateProgress('region', 25);
    },
    // 監(jiān)聽活動名稱變化
    nameChangeFn(val) {
      this.form.name = val;
      this.updateProgress('name', 25);
    },
    // 監(jiān)聽進度條變化
    updateProgress(key, num) {
      let sum = 0;
      if (this.isEmpty(this.form[key])) {
        // 監(jiān)聽的元素為空
        this.calculateIntegrityForm[key] = 0;
      } else {
        // 監(jiān)聽的元素不為空
        this.calculateIntegrityForm[key] = num;
      }
      for (let i in this.calculateIntegrityForm) {
        sum += this.calculateIntegrityForm[i];
      }
      this.percentage = sum;
    },

2、如何判斷對象、數(shù)組、字符串為空

    // 判斷變量字符串、數(shù)組、對象是否為空的公共方法
    isEmpty(str) {
      let thisType = typeof str;
      if (str === '' || str === null || str === undefined) {// null、undefined
        // 這里之所以用全等于,因為:
        // 1.JS里,‘' == 0 == [],會被判斷成相同,而下方針對數(shù)字0和空數(shù)組做出單獨處理,故此處只需要單獨判斷‘'
        // 2.JS里,typeof null == object,為簡化下方object處判斷邏輯,故此處需要用全等判斷null
        return true;
      } else if (thisType == 'string' && str.replace(/(^\s*)|(\s*$)/g, '').length == 0) {//string
        return true;
      } else if (thisType == 'number' && isNaN(str) || str == 0) {//number
        return true;
      } else if (thisType == 'object') {
        if (str instanceof Array) {// 數(shù)組為空判斷
          return str.length == 0;
        } else { // 對象為空判斷
          return JSON.stringify(str) == '{}';
        }
      }
      return false;// 傳入str不為空
    }

3、for in用于對象的遍歷,form[key]用于對象賦值

三、全部代碼

本項目只是一個demo,我全部寫在App.vue中,只安裝了一個elementui插件

<template>
  <div id="app">
    <el-form :model="form" ref="form" label-width="100px">
      <el-form-item label="活動名稱">
        <el-input v-model="form.name" @change="nameChangeFn" clearable></el-input>
      </el-form-item>
      <el-form-item label="活動區(qū)域">
        <el-select v-model="form.region" placeholder="請選擇活動區(qū)域" @change="regionChangeFn" clearable>
          <el-option label="區(qū)域一" value="shanghai"></el-option>
          <el-option label="區(qū)域二" value="beijing"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="活動性質">
        <el-checkbox-group v-model="form.type" @change="typeChangeFn">
          <el-checkbox label="美食/餐廳線上活動" name="type"></el-checkbox>
          <el-checkbox label="地推活動" name="type"></el-checkbox>
          <el-checkbox label="線下主題活動" name="type"></el-checkbox>
          <el-checkbox label="單純品牌曝光" name="type"></el-checkbox>
        </el-checkbox-group>
      </el-form-item>
      <el-form-item label="特殊資源">
        <el-radio-group v-model="form.resource" @change="resourceChangeFn">
          <el-radio label="線上品牌商贊助"></el-radio>
          <el-radio label="線下場地免費"></el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="進度條">
        <el-progress :text-inside="true" :stroke-width="26" :percentage="percentage"></el-progress>
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
export default {
  name: 'App',
  data() {
    return {
      percentage: 0, // 百分比
      form: {
        name: '',
        region: '',
        type: [],
        resource: '',
      },
      calculateIntegrityForm: {
        name: 0,
        region: 0,
        type: 0,
        resource: 0,
      }
    }
  },
  methods: {
    // 監(jiān)聽特殊資源變化
    resourceChangeFn(val) {
      this.form.resource = val;
      this.updateProgress('resource', 25);
    },
    // 監(jiān)聽活動性質變化
    typeChangeFn(val) {
      this.form.type = val;
      this.updateProgress('type', 25);
    },
    // 監(jiān)聽活動區(qū)域變化
    regionChangeFn(val) {
      this.form.region = val;
      this.updateProgress('region', 25);
    },
    // 監(jiān)聽活動名稱變化
    nameChangeFn(val) {
      this.form.name = val;
      this.updateProgress('name', 25);
    },
    // 監(jiān)聽進度條變化
    updateProgress(key, num) {
      let sum = 0;
      if (this.isEmpty(this.form[key])) {
        // 監(jiān)聽的元素為空
        this.calculateIntegrityForm[key] = 0;
      } else {
        // 監(jiān)聽的元素不為空
        this.calculateIntegrityForm[key] = num;
      }
      for (let i in this.calculateIntegrityForm) {
        sum += this.calculateIntegrityForm[i];
      }
      this.percentage = sum;
    },
    // 判斷變量字符串、數(shù)組、對象是否為空的公共方法
    isEmpty(str) {
      let thisType = typeof str;
      if (str === '' || str === null || str === undefined) {// null、undefined
        // 這里之所以用全等于,因為:
        // 1.JS里,‘' == 0 == [],會被判斷成相同,而下方針對數(shù)字0和空數(shù)組做出單獨處理,故此處只需要單獨判斷‘'
        // 2.JS里,typeof null == object,為簡化下方object處判斷邏輯,故此處需要用全等判斷null
        return true;
      } else if (thisType == 'string' && str.replace(/(^\s*)|(\s*$)/g, '').length == 0) {//string
        return true;
      } else if (thisType == 'number' && isNaN(str) || str == 0) {//number
        return true;
      } else if (thisType == 'object') {
        if (str instanceof Array) {// 數(shù)組為空判斷
          return str.length == 0;
        } else { // 對象為空判斷
          return JSON.stringify(str) == '{}';
        }
      }
      return false;// 傳入str不為空
    }
  },
}
</script>
<style>
.el-form {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
#app {
  height: 100%;
}
</style>

到此這篇關于Vue實現(xiàn)動態(tài)顯示表單項填寫進度功能的文章就介紹到這了,更多相關Vue動態(tài)顯示表單項填寫進度內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 如何利用vue3實現(xiàn)一個俄羅斯方塊

    如何利用vue3實現(xiàn)一個俄羅斯方塊

    俄羅斯方塊這個游戲相信大家都玩過,下面這篇文章主要給大家介紹了關于如何利用vue3實現(xiàn)一個俄羅斯方塊的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-01-01
  • 全站最詳細的Vuex教程

    全站最詳細的Vuex教程

    vuex是一個專門為vue.js設計的集中式狀態(tài)管理架構。這篇文章主要介紹了全站最詳細的Vuex教程,需要的朋友可以參考下
    2018-04-04
  • vue  composition-api 封裝組合式函數(shù)的操作方法

    vue  composition-api 封裝組合式函數(shù)的操作方法

    在 Vue 應用的概念中,“組合式函數(shù)”(Composables) 是一個利用 Vue 的組合式 API 來封裝和復用有狀態(tài)邏輯的函數(shù),這篇文章主要介紹了vue  composition-api 封裝組合式函數(shù)的操作方法,需要的朋友可以參考下
    2022-10-10
  • vue實現(xiàn)裁切圖片同時實現(xiàn)放大、縮小、旋轉功能

    vue實現(xiàn)裁切圖片同時實現(xiàn)放大、縮小、旋轉功能

    這篇文章主要介紹了vue實現(xiàn)裁切圖片同時實現(xiàn)放大、縮小、旋轉功能,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • vue--點擊當前增加class,其他刪除class的方法

    vue--點擊當前增加class,其他刪除class的方法

    今天小編就為大家分享一篇vue--點擊當前增加class,其他刪除class的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue3項目的3種創(chuàng)建方式代碼示例

    Vue3項目的3種創(chuàng)建方式代碼示例

    使用VUE3開發(fā)很久了,但一直沒進行總結和記錄,忙里偷閑整理搭建一套VUE3項目,正好記錄一下,這篇文章主要給大家介紹了關于Vue3項目的3種創(chuàng)建方式,需要的朋友可以參考下
    2024-03-03
  • Java獲取客戶端信息以及IP地址

    Java獲取客戶端信息以及IP地址

    這篇文章主要為大家詳細介紹了如何使用Java獲取客戶端信息以及IP地址,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-02-02
  • Vue使用watch同時監(jiān)聽多個值的實現(xiàn)方法示例

    Vue使用watch同時監(jiān)聽多個值的實現(xiàn)方法示例

    這篇文章主要為大家介紹了Vue中使用watch同時監(jiān)聽多個值的實現(xiàn)方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • vue中關于@media媒體查詢的使用

    vue中關于@media媒體查詢的使用

    這篇文章主要介紹了vue中關于@media媒體查詢的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue調試工具vue-devtools的安裝與使用

    Vue調試工具vue-devtools的安裝與使用

    vue-devtools是專門調試vue項目的調試工具,安裝成功之后,右邊會出現(xiàn)一個vue,就可以在線可以調試vue了,下面這篇文章主要給大家介紹了關于Vue調試工具vue-devtools的安裝與使用的相關資料,需要的朋友可以參考下
    2022-07-07

最新評論

邵武市| 大悟县| 信阳市| 高阳县| 侯马市| 朝阳区| 邹平县| 出国| 米脂县| 宜昌市| 丁青县| 新平| 福清市| 于田县| 绵竹市| 颍上县| 伊春市| 玉田县| 常德市| 乌海市| 定南县| 钟祥市| 盱眙县| 宁陕县| 原阳县| 中卫市| 盐池县| 姚安县| 秭归县| 衢州市| 阿荣旗| 玛纳斯县| 县级市| 岗巴县| 来宾市| 塔河县| 江永县| 汤原县| 南康市| 托克逊县| 海林市|