使用vue路由器的BeforeRouteEnter方法等待http请求完成

时间:2020-04-12 16:28:20

标签: vue.js routes vue-router

嗨,我正在努力做到这一点,以便当用户打开页面时,只有在成功检索到服务器中的数据后,它才会打开,以便在用户进入后0.5秒左右才会显示。

为此,我读到我需要使用BeforeRouteEnter,但是在查找有关如何正确使用此方法的信息时遇到了麻烦,尤其是在等待REST API完成其请求时。

这是我要等到路由到新组件的方法:

 async getThread() {
            const response = await postsService.fetchOneThread({
                id: this.blockId,
                topic: this.topicId,
                thread: this.postId
            });
            this.thread = response.data;
        }

所以,一旦this.thread = response.data,那么我是否要显示该页面。

要注意的重要一点是,我还通过URL参数来获取作为主题/黑色/帖子ID的数据。

这也是我的getUrlParam方法

url() {
            let x = this.$route.params.topic.split('-');
            this.topicId = x[0];

            let y = this.$route.params.id.split('-');
            this.blockId = y[0];

            let post = this.$route.params.thread.split('-');
            this.postId = post[1];

            this.getThread();
        }

谢谢

1 个答案:

答案 0 :(得分:0)

您需要在Departments(DepartmentID, Department) Primary Key = DepartmentID Aisles(Aisle_Id,Aisle) Primary Key = Aisle_Id Products(product_Id, Product_Name, aisle_id, department_id) Primary key=product_Id foreign key= aisle_id, department_id orders(order_id, user_id, eval_set, order_dow, order_hour_of_day) primary key= order_id order_products(order_id, product_id, add_to_cart, reordered) foreign key= order_id, product_id 内移动getThread

beforeRouteEnter

一些注意事项:

  • 我不认为beforeRouteEnter: (to, from, next) => { postsService.fetchOneThread({ id: this.blockId, topic: this.topicId, thread: this.postId }).then( response => { //store the data somewhere accessible next() }) }, 是异步的,所以我正在使用beforeRouteEnter来获取响应
  • 该组件尚未准备就绪,因此您尚无法访问它,您需要将信息保存在其他位置,以便组件可以读取。我建议为此使用Vuex

如果您决定使用then,则需要添加一个变异并从promise的回调中调用它。

Vuex