【问题标题】:VueJS get AJAX data before routing / mounting componenentsVue JS 在路由/挂载组件之前获取 AJAX 数据
【发布时间】:2020-06-08 13:13:19
【问题描述】:

我想在 VueJS 进行任何路由/挂载之前初始化一些基础数据。

现在我发现了 Global Navigation Guard router.beforeEach。但它不仅会在初始加载(页面加载)上触发,还会在触发的每个路由上触发。现在我可以输入某种if-statement 让代码只运行一次,但这不是我解决这个问题的首选方式:

// pseudo:
router.beforeEach((to, from, next) => {
    if (state.initialized === false) {
        await store.dispatch(init)
    }

    // the rest of my routing guard logic....
})

我不希望每次都运行 if 语句(知道它只会为真一次,之后永远为假)。

是否有官方方法让 (ajax) 代码只运行一次,在 vue 初始化之后(所以我可以访问 vuex 状态等),在任何路由开始之前。 p>

【问题讨论】:

    标签: vue.js vuex vue-router


    【解决方案1】:

    您可以在挂载根 Vue 实例之前轻松地执行异步任务。

    例如

    // main.js
    import Vue from 'vue'
    import store from 'path/to/your/store'
    import router from 'path/to/your/router'
    import App from './App.vue'
    
    store.dispatch('init').then(() => {
      new Vue({
        store,
        router,
        render: h => h(App)
      }).$mount('#app')
    })
    

    在加载时在index.html 中显示一些内容是个好主意,例如

    <div id="app">
      <!-- just an example, this will be replaced when Vue mounts -->
      <p>Loading...</p>
    </div>
    

    【讨论】:

    • 谢谢,在创建 Vue 实例之前,我不知道商店功能齐全。
    • 只是想感谢您提供这些信息。和 OP 一样,在创建 Vue 实例之前,我不知道 store 已经完全创建并准备就绪。
    猜你喜欢
    • 2019-02-03
    • 1970-01-01
    • 2017-08-29
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 2020-09-20
    • 2018-12-25
    • 2019-02-08
    相关资源
    最近更新 更多