当前位置: 首页 > article >正文

Vue3 + TS 实现同一项目同一链接,pc端打开是web应用,手机打开是H5应用

前言: 

        我自己搭建的项目基本都是用 postcss-px-to-viewport 插件进行适配的;

        最近在做一个项目,需求是同样的功能,用户可以在电脑上打开操作使用,也可以在手机上登录进去操作使用,但是跳转链接是同一个;也是查阅了一些资料,实现了相关功能,满足了用户的需求,现在就简单给大家介绍一下,有需要的同学可以借鉴一下。

核心构造:

核心:两套代码资源----pc端与移动端---作为 子组件

                                +

                    判断客户端类型
                                +

        每个路由的入口文件(比如index.vue)---- 作为 父组件

例子:单个页面功能目录结构:下面 具体使用 就以这个目录为根据解析

 

具体使用:

1、路由 --- 以“嘿嘿嘿”为例

export default {
  path: "/reportOrder",
  redirect: "/reportOrder/index",
  meta: {
    title: "哈哈哈"
  },
  children: [
    {
      path: "/reportOrder/index",
      name: "reportOrder",
      component: () => import("@/views/reportOrder/index.vue"),
      meta: {
        title: "嘿嘿嘿",
      }
    },
    {
      path: "/reportOrder/orderSignIn",
      name: "orderSignIn",
      component: () => import("@/views/reportOrder/order.vue"),
      meta: {
        title: "噗噗噗",
      }
    }
  ]
}

2、封装 判断访问设备类型 方法

/**
 * @description 判断手机端还是移动端 AppOrPC
 * @returns {String}
 */
export function AppOrPC() {
  let routes = "routersP";  // pc端
  if (
    navigator.userAgent.match(
      /(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i
    )
  ) {
    routes = "routersM";  // 移动端
  }
  return routes;
}

3、 在 父组件中 通过判断设备 动态渲染 pc端与移动端组件

<template>
  <div>
    <!-- pc端 -->
    <template v-if="AppOrPC() == 'routersP'">
      <pcShow />
    </template>
    <!-- 移动端 -->
    <template v-else-if="AppOrPC() == 'routersM'">
      <appShow />
    </template>
  </div>
</template>

<script setup lang="ts">
defineOptions({
  name: "reportOrder"
});
import { AppOrPC } from "@/utils";
import appShow from "./components/homePage/appShow.vue";
import pcShow from "./components/homePage/pcShow.vue";

</script>

 还有一种方式是通过 路由守卫 处理的 ,感兴趣的同学可以参考一下这篇文章:

vue3.0 + ts 项目实现pc端和移动端的适配+判断设备


http://www.kler.cn/news/325221.html

相关文章:

  • Solidity语言:重点学习Solidity编程语言,这是EVM上最常用的智能合约语言。
  • 关于大模型的10个思考
  • 828华为云征文 | 云服务器Flexus X实例:向量数据库 pgvector 部署,实现向量检索
  • Stable Diffusion零基础学习
  • 基于SpringBoot+Vue+MySQL的体育商城系统
  • Linux,C高级——day4
  • 【AI写作】解释 RESTful API,以及如何使用它构建 web 应用程序。
  • 基于nodejs+vue的水产品销售管理系统
  • 大厂面试真题:G1比CMS好在哪?一定好吗
  • CSR、SSR、SSG
  • 【STM32开发环境搭建】-3-STM32CubeMX Project Manager配置-自动生成一个Keil(MDK-ARM) 5的工程
  • 6.数据结构与算法-线性表的链式表示和实现-单链表
  • wireshark使用要点
  • 【STM32】江科大STM32笔记汇总(已完结)
  • Google BigTable架构详解
  • 无人驾驶车联网5G车载路由器应用
  • C++ 创建型设计模式
  • 怎么获取一个文件夹下的所有文件名?
  • MATLAB读取TIF文件,并可视化
  • 基于SpringBoot+Vue+MySQL的美食点餐管理系统
  • 项目集成SpringSecurity框架
  • Python项目Flask框架整合Redis
  • 揭秘移动硬盘RAW:原因、恢复策略与预防措施
  • 【TS】TypeScript内置条件类型-ReturnType
  • Java五子棋
  • 召回11 地理位置召回、作者召回、缓存召回
  • Oracle 表空间时间点恢复
  • 【自动化测试】Appium Server如何安装和Appium Server安装困难的原因和解决方法以及常见的一些安装失败的错误和解决方法
  • 前端问题小结
  • 大模型,互联网玩家们的「角斗场」