第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

vue3開(kāi)發(fā)前端表單緩存自定義指令,移動(dòng)端h5必備插件

標(biāo)簽:
前端工具 人工智能

开发背景

公司需要开发一款移动端应用,使用vue开发,用户录入表单需要本地缓存,刷新页面,或者不小心关掉重新进来,上次录入的信息还要存在。

这里有两种方案,第一种就是像博客平台一样,实时保存暂存文件到后端。每隔1-2秒调一次保存接口,但是这种成本较高,开发困难。

第二种方案就是,前端开发缓存插件,暂存数据保存在前端。

技术方案

采用vue自定义指令结合localstorage开发本地缓存策略

开发细节

1. 新建一个directive文件夹

image.png

2. index.ts ,绑定指令事件函数

export default function (app: any) {
  app.directive('storageInput', {
    created(el, binding) {
      console.log(el, binding, '1') // 项目加载后执行
      el.addEventListener('click', handleClick(binding), false)
    },
    updated(el, binding) {
      console.log(el, binding, '2') // 页面文档变更时执行
      el.addEventListener('click', handleClick(binding), false)
    }
  })
}

3. 主要函数方法

/**
 * @Description: v-storage-input='["insured", "gender", item.gender, index+1]'
 * @param el
 * @param binding
 */



import { localStore } from 'wfl-utils'
import { Const } from '/@/utils/constant'
const { SIExpireTime } = Const  // 18000s 300分钟

function handleClick(binding) {
  function handle() {
    const objInstance = binding.value
    if (Array.isArray(objInstance) && objInstance.length > 0) {
      setStorage(objInstance)
    }
  }
  function setStorage(key) {
    const objKey = key[0] // 获取需要存的对象key值 payer: {username: ''} payer既为key
    const fieldKey = key[1]
    const fieldValue = key[2]
    const fieldIndex = key[3]
    if (isNotNull(fieldIndex)) {
      // 保存数组,eg: insured
      const originObjKey = localStore.getItem(objKey)
      if (originObjKey) {
        // 如果原来有值的话先获取,在原来的地方push
        if (originObjKey.length <= fieldIndex) {
          originObjKey.push({})
        }
        originObjKey[fieldIndex][fieldKey] = fieldValue
        localStore.setItem(objKey, originObjKey, SIExpireTime)
      } else {
        const obj = {
          [fieldKey]: fieldValue
        }
        localStore.setItem(objKey, [obj], SIExpireTime)
      }
    } else {
      const originObjKey = localStore.getItem(objKey)
      if (originObjKey) {
        // 如果原来有值的话先获取,在原来的地方push
        originObjKey[fieldKey] = fieldValue
        localStore.setItem(objKey, originObjKey, SIExpireTime)
      } else {
        // 初始化时,local里没有值时
        const obj = {
          [fieldKey]: fieldValue
        }
        localStore.setItem(objKey, obj, SIExpireTime)
      }
    }
  }
  handle()
  return handle
}

function isNotNull(val) {
    return val !== undefined && val !== null && val !== 		'undefined' && val !== ''
}
  

上述代码主要思想是:保存用户录入数据到localStorage
先获取本地缓存key对应的值,如果没有就赋值存缓存并设置有效期, 用到wfl-utils这个插件。
如果有值则重新赋值覆盖到原来的对象字段上。

主方法里有if else 是判断是否有第四个参数,第四个参数是外层for循环的序号。

需要录入的是一个for循环数组需要加上第四个参数
如果是一个单出的form表单,大对象结构就不需要加第四个参数。

然后directive文件夹下新增index.ts

import storageInput from '/@/directive/storageInput'

export default function registerDirectives(app: any) {
  storageInput(app)
}

4. main.ts 注册指令

// 自定义指令
import registerDirectives from '/@/directive'
registerDirectives(app)

5. 代码使用

image.png

只有一个大对象的表单使用
image.png

显示结果
image.png

总结

至此,vue3前端表单缓存自定义指令就开发完了,是不是非常简单

作者:蜗牛老师,多年开发经验,热爱开源,乐于分享,关注我,后期会有更多有用的项目分享。欢迎点赞评论加关注,感谢!

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消