小心 Nuxt/Device 的坑

120 天前
 StevenZhl

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

<template>
  <section>
    <div v-if="$device.isDesktop">Desktop</div>
    <div v-else-if="$device.isTablet">Tablet</div>
    <div v-else>Mobile</div>
  </section>
</template>
<Dialog v-if="!isMobile" .../>
<DialogM v-else .../>
    
...
    
<Card :class="{mobile: isMobile}" .../>
1064 次点击
所在节点   Nuxt.js
1 条回复
StevenZhl
120 天前
- 补充:经过一下午的测试,发现该插件不太可靠,先前的问题主要是由于动态类名以及在**同一个 page 中使用了太多次 isMobile 判断**
- 是的,我之前的用法比较随心所欲,经常会有外层经过了 isMobile 判断,内层还使用 isMobile 再做判断的情况。建议使用该插件的话,严格遵循官方给的示例,即只在某一层(上述 demo 中的 div 层)做设备判断,其内部不要再调用该常量。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1066389

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX