Réduction du code passe-partout dans l'API de composition Vue 3 : simplification de la mise en œuvre du routeur et du stockage
P粉281089485
P粉281089485 2023-08-29 18:19:32
0
1
475
<p>À l'aide de l'API Composition de Vue 3, chaque vue a besoin du code suivant : </p> <pre class="brush:js;toolbar:false;">import { useRouter, useRoute } depuis 'vue-router' importer { useStore } depuis 'vuex' exporter par défaut { installation() { const routeur = useRouter() const magasin = useStore() //... } } ≪/pré> <p>Existe-t-il un moyen de les déclarer une fois lors de la création de l'application, puis de les transmettre à l'application créée et de les utiliser simplement dans la vue de l'application sans avoir besoin de ces déclarations ? Dans vue2, ceux-ci sont transmis lorsque l'application est initialisée, puis <code>this.$store</code> / <code>this.$router</code> </p> <p>Une idée pour utiliser des variables globales, qui peuvent facilement poser des problèmes : dans <code>app.vue</code> vous pouvez les déclarer une fois comme ceci : </p> <pre class="brush:js;toolbar:false;">importer { useStore } depuis 'vuex' exporter par défaut { installation() { globalthis.store = useStore() ≪/pré> <p>Alors <code>store</code> sera disponible partout. </p>
P粉281089485
P粉281089485

répondre à tous(1)
P粉436052364

danssetup()中,组件实例不可用,因为组件尚未创建,所以在Composition API中没有this上下文可用于使用this.$store.

Je pense à setup()中使store/router变量可用的唯一方法而不需要其他导入是将它们作为全局变量附加到window/globalThis (en ignorant la restriction des variables globales) :

// router.js
import { createRouter } from 'vue-router'
export default createRouter({/*...*/})

// store.js
import { createStore } from 'vuex'
export default createStore({/*...*/})

// main.js
import router from './router'
import store from './store'

window.$router = router
window.$store = store

Veuillez noter que dans l'API Options et les modèles, vous pouvez toujours utiliser $store$router pour accéder au magasin et au routeur. Pour des exemples spécifiques, veuillez vous référer aux exemples dans API Options et Pour Vuex 4 et Vue Router 4 :

.
<template>
  <div>{{ $store.state.myProp }}</div>
  <button @click="$router.back()">返回</button>
</template>

<script>
export default {
  mounted() {
    console.log(this.$store.state.myProp)
    console.log(this.$router.currentRoute)
  }
}
</script>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal