当前位置: 首页 > 面试题库 >

如何在初始vue.js / vue-router加载时加载所有服务器端数据?

朱浩大
2023-03-14
问题内容

我目前正在使用WordPress REST API和vue-router在小型单页网站上的页面之间进行转换。但是,当我使用REST
API对服务器进行AJAX调用时,数据将加载,但仅在页面已呈现之后才加载。

该VUE路由器文档提供了深入了解在关于如何前和导航到各航线后加载数据,但我想知道如何加载在初始页面加载的所有路线和页面数据,绕过需要每个负载数据激活路线的时间。

请注意,我正在将数据加载到acf属性中,然后使用来在.vue文件组件中访问它this.$parent.acfs

main.js路由器代码:

const router = new VueRouter({
    routes: [
        { path: '/', component: Home },
        { path: '/about', component: About },
        { path: '/tickets', component: Tickets },
        { path: '/sponsors', component: Sponsors },
    ],
    hashbang: false
});

exports.router = router;

const app = new Vue({
    router,
    data: {
        acfs: ''
    },
    created() {
        $.ajax({
            url: 'http://localhost/placeholder/wp-json/acf/v2/page/2',
            type: 'GET',
            success: function(response) {
                console.log(response);
                this.acfs = response.acf;
                // this.backgroundImage = response.acf.background_image.url
            }.bind(this)
        })
    }
}).$mount('#app')

Home.vue组件代码:

export default {
    name: 'about',
    data () {
        return {
            acf: this.$parent.acfs,
        } 
    },
}

有任何想法吗?


问题答案:

好吧,我终于想通了。我正在做的是在main.js实例化我的根vue实例的文件中调用同步ajax请求,并为data属性分配请求的数据,如下所示:

main.js

let acfData;

$.ajax({
    async: false,
    url: 'http://localhost/placeholder/wp-json/acf/v2/page/2',
    type: 'GET',
    success: function(response) {
        console.log(response.acf);
        acfData = response.acf;
    }.bind(this)
})

const router = new VueRouter({
    routes: [
        { path: '/', component: Home },
        { path: '/about', component: About },
        { path: '/tickets', component: Tickets },
        { path: '/sponsors', component: Sponsors },
    ],
    hashbang: false
});

exports.router = router;

const app = new Vue({
    router,
    data: {
        acfs: acfData 
    },
    created() {

    }
}).$mount('#app')

从这里,我可以在每个单独的.vue文件/组件中使用提取的数据,如下所示:

export default {
    name: 'app',
    data () {
    return {
        acf: this.$parent.acfs,
    }
},

最后,我.vue使用以下命令在同一模板中呈现数据:

<template>
  <transition
      name="home"
      v-on:enter="enter"
      v-on:leave="leave"
      v-bind:css="false"
      mode="out-in"
    >
    <div class="full-height-container background-image home" v-bind:style="{backgroundImage: 'url(' + this.acf.home_background_image.url + ')'}">
      <div class="content-container">
        <h1 class="white bold home-title">{{ acf.home_title }}</h1>
        <h2 class="white home-subtitle">{{ acf.home_subtitle }}</h2>
        <div class="button-block">
          <a href="#/about"><button class="white home-button-1">{{ acf.link_title_1 }}</button></a>
          <a href="#/tickets"><button class="white home-button-2">{{ acf.link_title_2 }}</button></a>
        </div>
      </div>
    </div>
  </transition>
</template>

要带走的最重要的信息是,与每次使用诸如之类的路径访问相比,所有ACF数据仅在开始时才被称为ONCE beforeRouteEnter (to, from, next)。结果,我能够根据需要获得柔滑的页面过渡。

希望这对遇到相同问题的人有所帮助。



 类似资料:
  • 问题内容: 我正在使用我使用android studio Tabbed Activity 创建的应用程序上工作,我选择了此活动,以便在用户滑动时从json url加载一些数据,并且我创建了另一个类,该类可以在方法上获取JSON数据,并且所有这些都可以正常工作,除非在应用程序时从调用方法的主要活动开始,并且当我调用布局时未填充任何数据时 ,我想要的是加载应用程序MainActivity时要显示的数据

  • 问题内容: 我想知道在应用程序启动之前加载初始数据库数据的最佳方法是什么?我正在寻找的东西将用数据填充我的H2数据库。 例如,我有一个域模型“ User”,我可以通过转到/ users来访问用户,但是最初数据库中没有任何用户,所以我必须创建它们。无论如何,是否有自动用数据填充数据库的信息? 目前,我有一个由容器实例化并为我创建用户的Bean。 例: 但是我非常怀疑这是最好的方法。还是? 问题答案:

  • 我想知道在应用程序启动之前加载初始数据库数据的最佳方法是什么?我正在寻找的是一些东西,将填补我的H2数据库与数据。 例如,我有一个域模型“user”我可以通过转到/users来访问用户,但最初数据库中没有任何用户,所以我必须创建它们。是否存在自动填充数据库的数据? 但我很怀疑这是最好的方法。还是真的?

  • 我正在使用springdoc openapi ui。当我加载我的swagger页面时,在加载swagger UI时,所有API都会调用spring security。我有Spring安全措施。我的期望是,当我试图从swagger访问特定的API时,应该调用安全性。 我昂首阔步的UI链接如下 'http://localhost:8080/swagger-用户界面/索引。html?configUrl=

  • 是否可以使用或任何其他文件在数据库中加载初始数据? 我知道用于数据库,而是数据库。但只是想知道数据库的是否有任何等价物。 在谷歌搜索时,我发现了这个SO链接(Spring Boot加载初始数据),它完成了我所要查找的内容,但它仍然不是一个独立的文件。