Naive UI 的 Drawer 抽屉怎么动态修改宽度?
我在用 Naive UI 的 Drawer 组件,想根据屏幕尺寸动态调整抽屉的宽度。比如在桌面端设成 600px,移动端变成 100%。我试过直接绑定 width 属性::width="drawerWidth",但发现第一次打开正常,切换后宽度没更新。
是不是需要手动调用什么方法刷新?或者我的写法有问题?下面是我的基本结构:
<template>
<n-button @click="showDrawer = true">打开</n-button>
<n-drawer v-model:show="showDrawer" :width="drawerWidth">
<n-drawer-content>内容</n-drawer-content>
</n-drawer>
</template>
<script setup>
import { ref, computed } from 'vue'
const showDrawer = ref(false)
const drawerWidth = computed(() => window.innerWidth < 768 ? '100%' : 600)
</script>
drawerWidth没有及时更新。你需要用一个监听器来监听窗口大小的变化,然后更新drawerWidth。你可以用 Vue 的
watch或者onMounted和onUnmounted钩子函数来实现这个功能。这里给你个简单的例子:这样,每当窗口大小改变时,
drawerWidth会自动重新计算。确保你的模板部分保持不变,Vue 会自动处理视图的更新。希望这能解决你的问题,有时候这些小细节真是挺头疼的。window.innerWidth,但这个值在 Vue 里不会自动响应式更新。你需要手动监听 resize 事件。改一下就行:
核心思路:把
window.innerWidth存成响应式 ref,然后监听 resize 事件更新它,这样 computed 才能重新计算。如果你用的是 Naive UI,还可以更偷懒一点,用自带的响应式断点:
这个
useBreakpoint会自动监听屏幕变化,返回 'xs' 's' 'm' 'l' 'xl' 等断点值,比自己写 resize 方便。