省流: device 提供了如
const { isMobile } = useDevice()
的形式来判断设备类型。但需要注意的是,在nuxt build
模式中使用v-if
以及动态类名(如<div :class="{mobile: isMobile}">
)的形式均可生效,而在nuxt build
和nuxt 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>
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 ...>
就行了,写法是有点傻,但也只能这样尽量找补了。这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.