惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
H
Heimdal Security Blog
K
Kaspersky official blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
S
Schneier on Security
G
GRAHAM CLULEY
U
Unit 42
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
C
CERT Recently Published Vulnerability Notes
Google DeepMind News
Google DeepMind News
罗磊的独立博客
Stack Overflow Blog
Stack Overflow Blog
阮一峰的网络日志
阮一峰的网络日志
Simon Willison's Weblog
Simon Willison's Weblog
C
Cisco Blogs
Cyberwarzone
Cyberwarzone
T
The Exploit Database - CXSecurity.com
Project Zero
Project Zero
Security Archives - TechRepublic
Security Archives - TechRepublic
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园 - 司徒正美
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
V
Visual Studio Blog
博客园 - Franky
Engineering at Meta
Engineering at Meta
WordPress大学
WordPress大学
Jina AI
Jina AI
P
Proofpoint News Feed
P
Proofpoint News Feed
有赞技术团队
有赞技术团队
L
LINUX DO - 最新话题
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
博客园 - 聂微东
T
The Blog of Author Tim Ferriss
Spread Privacy
Spread Privacy
Application and Cybersecurity Blog
Application and Cybersecurity Blog
IT之家
IT之家
S
Security Affairs
博客园 - 叶小钗
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
N
News | PayPal Newsroom
Cloudbric
Cloudbric
AWS News Blog
AWS News Blog
W
WeLiveSecurity
The Last Watchdog
The Last Watchdog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
NISL@THU
NISL@THU

Nuxt.js

nuxt3 大佬帮忙看个问题! - V2EX Nuxt3 的 public 静态资源文件怎么更新 - V2EX nuxt3 axios 请求出来的数据在源代码中没有这也没有办法 SEO 呀? - V2EX nuxt 部署在 cf Page 上 想用 env 里的环境变量 - V2EX Nuxt 下大家如何做用户身份认证 - V2EX nuxt 官网首页的水波效果动画是如何实现的? - V2EX nuxt3 在使用 nuxt/i18n 之后打包中的依赖生成软链接的文件夹,如何让它不生成这种文件夹? - V2EX 如何确定 Nuxtjs 当前的渲染模式? - V2EX nuxt3 请求数据的最佳实践是什么 - V2EX 用 nuxtjs vue 开发的一个后台系统 后悔了 还不如用 extjs - V2EX nuxt 怎么直接查询数据库然后给页面插值呢? - V2EX Nuxt 能不能结合 generate 和 build 两种方式? - V2EX 居然有 nuxtjs 的节点了,分享一下我的基于 nuxtjs 的博客吧 - V2EX
小心 Nuxt/Device 的坑 - V2EX
StevenZhl · 2024-08-20 · via Nuxt.js

这是一个创建于 664 天前的主题,其中的信息可能已经有所发展或是发生改变。

省流: device 提供了如const { isMobile } = useDevice()的形式来判断设备类型。但需要注意的是,在nuxt build模式中使用v-if以及动态类名(如<div :class="{mobile: isMobile}">)的形式均可生效,而在nuxt buildnuxt generate模式中仅v-if生效,后者会有问题。

  • 本人菜鸟前端一枚,在一个非互联网企业做前端开发,团队原本用的是 Angular ,最近几个项目因为甲方要求,换到了 Vue3+Nuxt3 ,SSR 模式,所以大家对 Nuxt 都了解不深
  • 前两天我们在桌面端做完的情况下做响应式,但是桌面端和手机端的 DOM 差别比较大,而且页面内容比较复杂,如果还是按照媒体查询 CSS 的方式会让 CSS 和 HTML 很长,不太好维护,并且也影响加载速度(毕竟相当于加载两个版本的页面)。
  • 我觉得比较好的处理方法是:对于 DOM 差别很大的,干脆写两种组件,使用 v-if 选择加载;而对于差别不大的,就加一个.mobile 的 class ,然后在原本的 CSS 基础上微调一下。
  • 找了找相关的帖子还真发现了个插件,就是标题提到的这个@nuxtjs/device,看简介是通过检测 UA 判断设备类型的,那理论上在 DOM 挂载之前就能确定类型,试了一下给的 demo (如下)
<template>
  <section>
    <div v-if="$device.isDesktop">Desktop</div>
    <div v-else-if="$device.isTablet">Tablet</div>
    <div v-else>Mobile</div>
  </section>
</template>
  • 好像也没问题,就拿这个插件在 dev 环境下写了。在实际使用中,大概采用了以下两种写法,但在dev模式下都能正常工作
<Dialog v-if="!isMobile" .../>
<DialogM v-else .../>
    
...
    
<Card :class="{mobile: isMobile}" .../>
  • 今天写的差不多了试了试nuxt generate,发现访问时,使用第二种写法的组件一律采用了手机端的样式(配置项里默认 UA 是手机版的),无视 UA ,这才发现官方文档里并没提第二种写法,但它在dev模式下确实能正常工作....没办法,现在只能尽力填坑。
  • 好在填坑也不算太难,只要把<Card :class="{mobile: isMobile}" .../>改为<Card v-if="isMobile" class="mobile" .../> <Card v-else ...>就行了,写法是有点傻,但也只能这样尽量找补了。
  • 长教训了,下次要采用一个什么新东西时一定要充分测试....
StevenZhl

1

StevenZhl      2024 年 8 月 20 日

- 补充:经过一下午的测试,发现该插件不太可靠,先前的问题主要是由于动态类名以及在**同一个 page 中使用了太多次 isMobile 判断**
- 是的,我之前的用法比较随心所欲,经常会有外层经过了 isMobile 判断,内层还使用 isMobile 再做判断的情况。建议使用该插件的话,严格遵循官方给的示例,即只在某一层(上述 demo 中的 div 层)做设备判断,其内部不要再调用该常量。

HoshinoSuzumi

2

HoshinoSuzumi      2025 年 1 月 24 日

将使用 `useDevice` 的组件设为 client 模式能解决吗?
即将组件名命名为 `[componentName].client.vue`