亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

切換 Vuetify 導航抽屜 v-modeled 到 Vuex 變量

切換 Vuetify 導航抽屜 v-modeled 到 Vuex 變量

當年話下 2022-06-09 19:09:43
(我發現了一些類似的問題,但似乎沒有一個可以解決我的問題,但是如果我遺漏了什么,請參考。)我正在使用 Vue、Vuex 和 Vuetify。從“Google Keep”示例布局開始,我分解出 NavDrawer 和 AppBar 組件。但是,我在讓 NavDrawer 切換工作時遇到了一些麻煩。在實現 Vuex 之前,我使用了 props 和 events,通過父組件。使用Vuex,我的代碼如下:主.js:const store = new Vuex.Store({  state: {    drawerState: null  },  mutations: {    toggleDrawerState(state) {      state.drawerState = !state.drawerState    }  }})AppBar.view:<template>  <v-app-bar app clipped-left class="primary">    <v-app-bar-nav-icon @click="toggleDrawer()"/>  </v-app-bar></template><script>export default {  name: 'AppBar',  methods: {    toggleDrawer: function() {      this.$store.commit('toggleDrawerState')    }  }}</script>NavigationDrawer.vue:<template>  <v-navigation-drawer v-model="drawerState" app clipped color="grey lighten-4">    <!-- content -->  </v-navigation-drawer></template><script>export default {  name: 'NavigationDrawer',  computed: {    drawerState: {      get: function() { return this.$store.state.drawerState },      set: () => null    }  }}</script>NavDrawer的set: () => null計算屬性中的 是因為我一開始將它設置為調用突變,這導致了切換的反饋循環?,F在,我的問題是,給定一個初始v-model值null,Vuetify 在桌面上打開抽屜并在移動設備上關閉。并且當drawerState = !drawerState被調用時,null被制作true,但這只是讓抽屜在桌面上保持打開狀態,這意味著必須再次單擊該按鈕才能關閉抽屜。在最初的雙觸發問題之后,它在桌面上運行良好。然而,在移動設備上,它總是需要兩個觸發器。(我說的是移動設備,但實際上我只是縮小了瀏覽器窗口的大小。)我認為這是因為在調整大?。ɑ蚣虞d時)時,抽屜會自動隱藏,但無法更新 Vuex 存儲布爾值,這意味著雙觸發有必要的。因此,我的問題是:實現 Vuetify 的 navdrawer 以便從另一個組件切換它的標準或最佳實踐方法是什么?我認為狀態(無論是打開還是關閉)可能會被直接存儲,但是沒有“打開”或“關閉”事件可以訪問它。(例如,這個問題沒有答案。)它在示例頁面上運行良好,但它如何適應作為子組件工作?
查看完整描述

1 回答

?
墨色風雨

TA貢獻1853條經驗 獲得超6個贊

使用 Vuex getter 并在計算的 getter 中引用它們,以及在計算的 setter 中檢索新值并使用它在存儲中提交突變是一個不錯的選擇。所以你的商店會變成:


const store = new Vuex.Store({

  state: {

    drawerState: false

  },

  mutations: {

    toggleDrawerState (state, data) {

      state.drawerState = data

    }

  },

  getters : {

    drawerState: (state) => state.drawerState

  }

})

您的導航抽屜組件將變為:


<template>

  <v-navigation-drawer v-model="drawerState" app clipped color="grey lighten-4">

    <!-- content -->

  </v-navigation-drawer>

</template>


<script>

export default {

  name: 'NavigationDrawer',

  computed: {

    drawerState: {

      get () { return this.$store.getters.drawerState },

      set (v) { return this.$store.commit('toggleDrawerState', v) }

    }

  }

}

</script>

這是一個顯示完整示例的代碼筆: https ://codepen.io/JamieCurnow/pen/wvaZeRe


查看完整回答
反對 回復 2022-06-09
  • 1 回答
  • 0 關注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號