J'ai une page avec une barre d'outils et une barre latérale. La barre latérale n'est visible que lorsqu'un utilisateur est connecté. La barre latérale Tiroir de navigation n'est pas visible par défaut si l'utilisateur est sur un appareil mobile. < / p>
Maintenant, je veux un bouton dans la barre d'outils pour que l'utilisateur puisse ouvrir la barre latérale. Mais la barre d'outils et la barre latérale sont deux composants différents. Par conséquent, j'utilise Vuex pour gérer l'état. Mais l'état est computet et n'a pas de setter, donc je ne peux pas utiliser l'état direct dans le v-model des contrôleurs de navigation.
Maintenant, j'ai lu que vous pouvez définir une méthode get et une méthode set sur des variables calculées. Mais est-ce la meilleure façon de procéder?
3 Réponses :
La façon dont vuex veut que vous fassiez est d'utiliser la mutation d'état appropriée.
@click="$store.commit('open-sidebar')"
Et la valeur calculée réagira à la mutation.
Sur votre composant de barre d'outils
, c'est là que vous voulez votre bouton; Définissez une propriété booléenne de tiroir. Le code HTML avec le bouton dans le composant de la barre d'outils
ressemblerait à ceci:
<toolbar :drawer.sync="drawer"></toolbar> <v-navigation-drawer class="secondary" dark fixed :clipped="$vuetify.breakpoint.mdAndUp" app v-model="drawer">
Dans le composant de la barre d'outils
parent, vous voudriez également déclarer une variable de tiroir. Ensuite, le html ressemblerait à ceci:
<v-toolbar color="primary" dark app :clipped-left="$vuetify.breakpoint.mdAndUp" fixed> <v-toolbar-side-icon @click.stop="$emit('update:drawer', !drawer)"></v-toolbar-side-icon>
toolbar
est votre composant de barre d'outils
que j'ai mentionné plus tôt.
Vous noterez que le tiroir de navigation écoute maintenant la propriété du tiroir.
S'il vous plaît laissez-moi savoir si cette réponse ne suffit pas, je vais créer un exemple pour vous p >
dans votre modèle:
export default { state: { isHomeNavigationDrawerOpen: null, }, actions: { TOGGLE_HOME_NAVIGATION_DRAWER(context, open) { context.commit('TOGGLE_HOME_NAVIGATION_DRAWER', open) }, }, mutations: { TOGGLE_HOME_NAVIGATION_DRAWER: (state, open) => { state.isHomeNavigationDrawerOpen = open }, }, }
Dans votre module de magasin toolbar.js (ou le nom de votre module)
<template> <v-navigation-drawer :value="isHomeNavigationDrawerOpen" @input="TOGGLE_HOME_NAVIGATION_DRAWER" ...> </v-navigation-drawer> </template> <scripts> import { mapState, mapActions } from 'vuex' export default { computed: { ...mapState('userData', ['user', 'loggedIn']), ...mapState('toolbar', ['isHomeNavigationDrawerOpen']), }, methods:{ ...mapActions('toolbar', ['TOGGLE_HOME_NAVIGATION_DRAWER']), } ...
Cela fonctionnait mieux pour mon cas d'utilisation isHomeNavigationDrawerOpen: null,
pourrait être défini sur true / false en fonction de ce que vous vouliez que votre état initial soit.
Avec un exemple de code, ce serait mieux.