继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Vue使用全局工具库函数

Zz皓
关注TA
已关注
手记 20
粉丝 114
获赞 415

场景描述

是这样的,在开发项目的时候,我封装了一个工具库函数用来封装全局通用的业务代码,比如判断中文姓名或者身份证的正误,下面是代码示例

export function isPersonName(val) {
  let pattern = /^[\u4E00-\u9FA5]{2,4}$/;
  if(pattern.test(val)) {
    return true;
  } 
  return false;
}

调用以上的封装函数

import { isPersonName } from "@/utils/format.js"
if(!isPersonName(this.visitingPersonName) || this.visitingPersonName == "") {
  this.$toast({
    message: `请填写正确的就诊人姓名`,
    position: "middle",
    duration: 2000
  });
  return false;
}



问题再现

此时有了另一个需求,就是需要隐藏身份证中间的年月日,我同样使用相同的方式将其封装在工具库函数中

export function interceptIdCard(val) {
  return val.replace(/(\d{4})\d*([0-9a-zA-Z]{4})/,"$1******$2");
}

在调用的时候就出现问题了

import { interceptIdCard } from "@/utils/format.js"
<div class="item-footer">{{interceptIdCard(item.visitingPersonIdentification)}}</div>

[Vue warn]: Property or method “interceptIdCard” is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property.

看错误提示是interceptIdCard 这个函数对象并未写入Vue实例中,然而为什么第一个栗子却能够跑通呢?这让我百思不得其解,后来只能将interceptIdCard 函数写在Vue实例中methods集合里面才得以正常运行

<div class="item-footer">{{interceptIdCard(item.visitingPersonIdentification)}}</div>

methods: {
  interceptIdCard(val){
    return val.replace(/(\d{4})\d*([0-9a-zA-Z]{4})/,"$1****$2");
  }
}

以上是我在开发中的一些分享,如果有人知道如何解决文中的问题,希望告知下啦。

后记

解决这个问题了,其实简单的很,怎么自己就想不到,我好菜啊。下面看解决方法

export function interceptIdCard(val) {
  return val.replace(/(\d{4})\d*([0-9a-zA-Z]{4})/,"$1******$2");
}

在组件中引用

<div class="item-footer">{{interceptIdCards(item.visitingPersonIdentification)}}</div>

import { interceptIdCard } from "@/utils/format.js";
// 切割身份证正则表达式
interceptIdCards(val) {
  return interceptIdCard(val);
}

真的是菜死了,麻蛋!

打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP

热门评论

模板(template)不能直接使用,模板中是用的方法都是当前组件的实例方法

查看全部评论