省流: 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 ...>
就行了,写法是有点傻,但也只能这样尽量找补了。 1
StevenZhl OP - 补充:经过一下午的测试,发现该插件不太可靠,先前的问题主要是由于动态类名以及在**同一个 page 中使用了太多次 isMobile 判断**
- 是的,我之前的用法比较随心所欲,经常会有外层经过了 isMobile 判断,内层还使用 isMobile 再做判断的情况。建议使用该插件的话,严格遵循官方给的示例,即只在某一层(上述 demo 中的 div 层)做设备判断,其内部不要再调用该常量。 |