【发布时间】:2020-09-11 19:22:17
【问题描述】:
如何解决此错误消息:
[Vue 警告]:避免直接改变 prop,因为每当父组件重新渲染时,该值都会被覆盖。相反,使用基于道具值的数据或计算属性。正在变异的道具:“抽屉”
父组件:
<template>
<div>
<q-header bordered class="bg-grey-11">
<q-toolbar>
<q-btn
@click="drawer = !drawer"
/>
.....
</q-header>
<drawer-main :drawer="drawer"></drawer-main>
</div>
</template>
<script>
import DrawerMain from "@/components/drawer/DrawerMain";
export default {
props: ["miniState", "drawerClick"],
components: {
DrawerMain
},
data() {
return {
drawer: false
};
}
};
</script>
子组件:
<template>
<q-drawer
v-model="drawer"
show-if-above
:mini="!drawer || miniState"
@click.capture="drawerClick"
>
<div class="q-mini-drawer-hide absolute" style="top: 15px; right: -17px">
<q-btn
@click="miniState = true"
/>
</div>
</q-drawer>
</template>
<script>
import DrawerNavigation from "@/components/drawer/DrawerNavigation";
export default {
props: ["drawer"],
components: {
DrawerNavigation
},
data() {
return { miniState: false };
},
methods: {
drawerClick(e) {
if (this.miniState) {
this.miniState = false;
e.stopPropagation();
}
}
}
};
</script>
【问题讨论】:
-
您应该将
v-model="drawer"移动到父组件中,然后阅读本指南中有关如何将本机事件实现到子组件的内容:vuejs.org/v2/guide/…。或者,您可以使用v-bind.sync -
它可以工作,但它不会一直切换抽屉。我正在使用类星体框架:quasar.dev/layout/drawer#Click-trigger
-
你能在代码沙箱中创建最小的例子吗?
标签: javascript vue.js vuejs2 vue-component