vue3+vant创建移动端项目,实战项目常见采坑记录

这篇具有很好参考价值的文章主要介绍了vue3+vant创建移动端项目,实战项目常见采坑记录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

  产品背景介绍

  我所做的这个项目,刚开始是没有移动端需求的,等PC端做完了上线使用了几个月后,突然有一天产品经理找到我说是要做一个在PC端添加一个快速注册入口,用手机微信扫二位码进入移动端注册页面,用户注册。

所以本次需求就是在PC端添加一个tool-tip气泡型弹出二维码,再开发一个移动端注册页面。

  起初我是在PC项目中引入vant新加了一个模块来存放移动注册页面和注册成功页面的,然后想使用postcss-px-to-viewport的exclude和include属性配置来区分PC和移动页面,避免样式干扰。

然而,是我天真了,看网上各种postcss-px-to-viewport的exclude和include的配置,更换各个版本以及相似的更新版本,都不能完美做到兼容移动端和PC端,我就放弃了移动pc放在一个项目中了,最终只能单独的把移动页面单独摘出来成立一个单独项目跑,坑爹啊。

  1. 表单密码可见切换以及不让输入汉字空格

代码实现:

<van-field
              :required="true"
              v-model="registerForm.password"
              :type="switchPassType ? 'text' : 'password'"
              name="password"
              label="登录密码"
              placeholder="请输入登录密码"
              :right-icon="switchPassType ? 'eye' : 'closed-eye'"
              @click-right-icon="switchPassType = !switchPassType"
              :rules="rules.password"
              :update:model-value="registerForm.password=registerForm.password.replace(/[\u4e00-\u9fa5/\s+/]/ig,'')"
            />
 
备注:密码这块虽然有些网上搜到的让用vant 自带的digit属性让只能输入数字,但这个不符合产品需求,密码应为数字、字母、特殊符号都可输入。
使用van-field自带的update:model-value方法进行汉字、空格校验,亲测有效。
 

  2. 移动端页面出现X轴滚动条问题

1) 在index.html文件中添加
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,minimum-scale=1,viewport-fit=cover"/>
2) 在公共样式中修改html、body设置的样式
html {
    overflow-y: scroll;
}

:root {
    overflow-y: auto;
    overflow-x: hidden;
}

:root body {
    position: absolute;
}

body {
    width: 100%;
    margin: 0;
    padding: 0;
    overflow: hidden;
}

  3.使用postcss-px-to-viewport做适配出现的问题

使用教程我就不赘述了,网上一大片,说点有用的
1)兼容vant的375设置
在你的vue.config.js文件中添加如下代码:
css: {
    loaderOptions: {
      postcss: {
        postcssOptions: (loaderContext) => {
          return {
            plugins: [
              ["autoprefixer"],
              // vant px转vw。参坑:单独写在postcss.config.js中无法解析vant内部样式
              {
                "postcss-px-to-viewport": {
                  unitToConvert: "px",
                  viewportWidth: loaderContext.resourcePath.includes("vant") ? 375 : 750,
                  // viewportWidth: 750,  // 视窗的宽度,对应的是我们设计稿的宽度,一般是750
                  // viewportHeight: 1334, // 视窗的高度,根据750设备的宽度来指定,一般指定1334,也可以不配置
                  unitPrecision: 6, // 指定`px`转换为视窗单位值的小数位数
                  propList: ["*"],
                  viewportUnit: "vw", //指定需要转换成的视窗单位,建议使用vw
                  fontViewportUnit: "vw",
                  selectorBlackList: [], // 如['.ignore'], 可以指定不转换为视窗单位的类,可以自定义,可以无限添加,建议定义一至两个通用的类名
                  minPixelValue: 1, // 小于或等于`1px`不转换为视窗单位,你也可以设置为你想要的值
                  mediaQuery: true, // 允许在媒体查询中转换`px`
                  exclude: [],
                  landscape: false
                },
              },
            ],
          };
        },
      },
    },
  }
代码目录:

vue3+vant创建移动端项目,实战项目常见采坑记录

 文章来源地址https://www.toymoban.com/news/detail-416234.html

备注:其中的exclude属性不知道树我本人写的有问题还是怎么的,想用它处理views目录下的特定目录文件总是不生效,include就更别说了,各种版本、各种写法都换过了没啥nuan用。

  4.检测是否是移动端打开跳转不同路由

1)路由处理

vue3+vant创建移动端项目,实战项目常见采坑记录

export const ISMOBILE = function () {

    let flag = navigator.userAgent.match(
        /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
    );
    return flag;
};

vue3+vant创建移动端项目,实战项目常见采坑记录

  5. DatePicker日期选择器默认选中当前日期

在这块有2个坑:

1)它的年份默认最小2013,不能像elementui的日期选择器一样自由选择,所以,使用时你可以使用min-date属性设置最小年月日。

2)默认选中当前年月日,

currentDate使用计算属性获取,
备注:月日不足2位要用0补齐,不然获取到的当前年月日不对

vue3+vant创建移动端项目,实战项目常见采坑记录

/**获取当前日期回填 */
const currentDate = computed(() => {
  const nowDate = myDate.toLocaleDateString().split("/");
  if (nowDate[1].length < 2) {
    nowDate[1] = "0" + nowDate[1];
  }
  if (nowDate[2].length < 2) {
    nowDate[1] = "0" + nowDate[2];
  }
  return nowDate;
});

   6. 表单校验添加

1)一定要给van-form中添加ref属性,在van-field中使用name作为校验标识,使用rules属性添加校验规则。

备注:想要对一个字段进行不同校验以及不同提示,只能使用嵌套校验,对message提示语进行变量赋值。

vue3+vant创建移动端项目,实战项目常见采坑记录

vue3+vant创建移动端项目,实战项目常见采坑记录

 

   7.文件上传预览删除

直接上代码,很明了:

vue3+vant创建移动端项目,实战项目常见采坑记录

// 上传图片、上传文件校验大小和格式
const beforeRead = (file) => {
  const correctFormat = ["jpg", "jpeg", "png", "bmp"];
  const isArray = Object.prototype.toString.call(file) === "[object Array]";
  const isLimit50M = 1024 * 1024 * 6; // 是否大于50M
  if (isArray) {
    const sizes = file.map((item) => item.size);
    if (sizes.some((item) => item > isLimit50M)) {
      showNotify({ type: "warning", message: "大小不能超过6M" });
      return false;
    }
    const types = file.map(
      ({ name }) => name.slice(name.lastIndexOf(".") + 1) // 后缀
    );
    if (!types.every((item) => correctFormat.includes(item))) {
      showNotify({ type: "warning", message: "请上传jpg/jpeg/png/bmp" });
      return false;
    }
  } else {
    if (file.size > isLimit50M) {
      showNotify({ type: "warning", message: "大小不能超过6M" });
      return false;
    }
    const type = file.name.slice(file.name.lastIndexOf(".") + 1);
    if (!correctFormat.includes(type)) {
      showNotify({ type: "warning", message: "请上传jpg/jpeg/png/bmp" });
      return false;
    }
  }
  return true;
};

// 文件上传
const fileUpload = (data, key, id, file) => {
  fileUploadApi(data)
    .then((res) => {
      if (res.status === 1) {
        res.data.key = new Date().getTime();
        res.data.url = res.data.attachPreviewUrl;
        res.data.percent = 100;
        res.data.status = "success";
        res.data.name = res.data.attachSrcName;
        res.data.uid = id;
        registerForm[key] = [];
        registerForm[key].push(res.data);
        file.status = "success";
        showNotify({ type: "success", message: "上传成功" });
        return true;
      } else {
        file.status = "failed";
        showNotify({ type: "danger", message: "上传失败,请重新上传" });
        return false;
      }
    })
    .catch((err) => {
      showNotify({ type: "danger", message: err.message });
      return false;
    });
};
/**文件上傳动作 */
const myBeforeRead = (file, field) => {
  if (beforeRead(file)) {
    file.status = "uploading";
    file.message = "上传中...";
    uploadData.file = file;
    uploadData.field = field;
    const form = new FormData();
    const keys = Object.keys(uploadData);
    keys.forEach((key) => {
      form.append(key, uploadData[key]);
    });
    // 后台接口
    if (fileUpload(form, uploadData.field, file.lastModified, file)) {
      return true;
    } else {
      return false;
    }
  } else {
    return false;
  }
};
/**文件删除动作 */
const delImg = (file, field) => {
  registerForm[field] = [];
  proxy.$refs.registerFormRef.validate(field);
};

 

到了这里,关于vue3+vant创建移动端项目,实战项目常见采坑记录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(登录注册页面,验证码)

    系列内容 参考链接 基于 Vue3.x + Vant UI 的多功能记账本(一) 项目演示,涉及知识点 基于 Vue3.x + Vant UI 的多功能记账本(二) 搭建开发环境 基于 Vue3.x + Vant UI 的多功能记账本(三) 开发导航栏及公共部分 项目演示 Vue3 + Vant UI_多功能记账本 1、登录注册页面 页面设计,页面

    2024年02月03日
    浏览(76)
  • Vue项目实战——【基于 Vue3.x + Vant UI】实现一个多功能记账本(开发导航栏及公共部分)

    系列内容 参考链接 基于 Vue3.x + Vant UI 的多功能记账本(一) 项目演示,涉及知识点 基于 Vue3.x + Vant UI 的多功能记账本(二) 搭建开发环境 Vue3 + Vant UI_多功能记账本 1、底部导航栏 components 文件夹下,创建 NavBar.vue 组件 NavBar.vue 详细内容请看代码和注释 van-tabbar-item 为标签栏

    2024年02月02日
    浏览(57)
  • 【Vue】Vue2创建移动端项目实战教程,创建移动端项目保姆级教程,设置axios,utils工具包,vue.fonfig.js配置项 (下)

    这里是创建移动端项目 【Vue】Vue2.x创建项目全程讲解,保姆级教程,手把手教,Vue2怎么创建项目(上) 【Vue】Vue2创建移动端项目实战教程,创建移动端项目保姆级教程,接上一篇创建Vue2项目(中) 【Vue】Vue2创建移动端项目实战教程,创建移动端项目保姆级教程,设置ax

    2024年02月13日
    浏览(53)
  • vue3+vant+cropper.js实现移动端图片裁剪功能

    最近做项目中遇到一个需求,需要对海报图片按照一定的比例进行裁剪并上传到oss。一开始这个需求思路有两个,使用canvas原生或者寻找现成的第三方库,对比了一番觉得canvas实现时间耗费较长,且秉承着不重复造轮子的原则(其实是菜)。 在进行技术调研后,决定使用vu

    2024年02月01日
    浏览(46)
  • 【Vue H5项目实战】从0到1的自助点餐系统—— 搭建脚手架(Vue3.2 + Vite + TS + Vant + Pinia + Node.js)

    H5 项目基于 Web 技术,可以在智能手机、平板电脑等移动设备上的浏览器中运行,无需下载和安装任何应用程序,且H5 项目的代码和资源可以集中在服务器端进行管理,只需更新服务器上的代码,即可让所有顾客访问到最新的系统版本。 本系列将以肯德基自助点餐页面为模板

    2024年02月13日
    浏览(65)
  • 个人博客-SpringBoot+Vue3项目实战(3)Springboot+Mybatis创建后端项目

    🧨🧨🧨 大家好,我是搞前端的半夏 🧑,一个热爱写文的前端工程师 💻. 如果喜欢我的文章,可以关注 ➕ 点赞 👍 一起学习交流前端,成为更优秀的工程师~ 更多故事—点我探索新世界! 🧨🧨🧨 本专栏以搭建一个个人博客为目标,从前后端开发的开发,云服务的配置

    2023年04月10日
    浏览(50)
  • Vant简介及创建Vue项目并使用Vant

                                      🔥 文档网站(国内) 🌈 文档网站(GitHub) Vant 是一个轻量、可定制的移动端组件库,于 2017 年开源。 目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本,并由社区团队维护React 版本和支付宝小程序版本。 🚀 性

    2024年02月04日
    浏览(55)
  • vue3+vite+vant4手机端项目实录

    目录 一、项目介绍 二、项目的搭建 1.vite的安装 2.启动vite项目  3.vant4的引入与使用 3.1安装指令 npm i vant 3.2引入vant4 4.路由router的引入 4.1安装指令 4.2路由配置 5.路径别名设置 6.json-server 6.1json-server安装 6.2json-server启动项配置 6.3启动命令:npm run mock 7.axios请求数据 7.1安装axios依

    2024年02月03日
    浏览(72)
  • uniapp+vue3项目中使用vant-weapp

    创建项目 通过vue-cli命令行创建项目 Vue3/Vite版要求 node 版本 ^14.18.0 || =16.0.0 uni-app官网 (dcloud.net.cn) 打开项目 点击顶部菜单栏终端/新建终端 执行安装依赖指令 安装vant-weapp 引入vant-weapp 在  /src目录下 创建  wxcomponents  目录 复制node_modules/@vant/weapp/dist文件夹到 wxcomponents文件夹

    2024年02月13日
    浏览(135)
  • vue3+vant自动导入+pina+vite+js+pnpm搭建项目框架

    要搭建一个使用Vue 3、Vant组件库、Pina状态管理、Vite作为构建工具、JavaScript语言、pnpm作为包管理工具的项目框架,可以按照以下步骤进行操作: 这将生成一个 package.json 文件。 至此,你已经搭建好了一个使用Vue 3、Vant组件库、Pina状态管理、Vite作为构建工具、JavaScript语言、

    2024年04月14日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包