Я создал компонент Sidebar , используя навигационный ящик Vuetify. Код выглядит примерно так:
<template>
<v-navigation-drawer persistent clipped v-model="isVisible" fixed app>
<!-- content of the sidebar goes here -->
</v-navigation-drawer>
</template>
<script>
export default {
name: 'Sidebar',
props: {
visible: Boolean,
},
data() {
return {
isVisible: this.visible,
};
},
}
</script>
Обратите внимание, что я дублирую видимый реквизит с данными isVisible . Я пытался использовать опору непосредственно в v-модели , но каждый раз, когда боковая панель закрывалась, я получал предупреждение в консоли об изменении реквизита напрямую, так как они будут перезаписаны, когда родительский рендеринг.
В родительском представлении у меня есть кнопка на панели инструментов, которая должна менять значок в зависимости от видимости панели инструментов.
<template>
<v-container fluid>
<sidebar :visible="sidebarVisible"/>
<v-toolbar app :clipped-left="true">
<v-btn icon @click.stop="sidebarVisible = !sidebarVisible">
<v-icon v-html="sidebarVisible ? 'chevron_right' : 'chevron_left'"/>
</v-btn>
</v-toolbar>
<v-content>
<router-view/>
</v-content>
<v-footer :fixed="fixed" app>
<span>© 2017</span>
</v-footer>
</v-container>
</template>
<script>
import Sidebar from '@/components/Sidebar.vue';
export default {
name: 'MainView',
data() {
return {
sidebarVisible: false,
fixed: false,
title: 'Title',
};
},
components: {
Sidebar,
},
};
</script>
У меня проблема в том, что если закрыть боковую панель, щелкнув за ее пределами, значок кнопки на панели инструментов не изменится на chevron-left . Более того, чтобы вернуть боковую панель, мне нужно дважды нажать на кнопку.
Очевидно, это потому, что данные sidebarVisible в главном окне не обновляются при закрытии боковой панели. Как убедиться, что sidebarVisible обновляется при закрытии боковой панели?