码迷,mamicode.com
首页 > 其他好文 > 详细

十、Vue Router 进阶-获取数据

时间:2019-12-01 20:54:18      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:状态   params   script   tle   return   efault   tostring   添加   false   

获取数据的两种方式

  • 导航完成之后获取数据:先完成导航,然后在接下来的组件生命周期钩子created中获取数据。在数据获取期间展示一个loading加载中的状态提示。

  • 导航完成之前获取:导航完成前,在路由进入的守卫中获取数据,在数据获取成功后执行导航。

导航完成之后获取数据(可展示loading)

在组件的created钩子中获取数据。在获取数据期间展示一个loading状态,可以在不同视图间展示不同的loading状态。

<template>
    <div class="post">
        <div class="loading" v-if="loading">Loading...</div>
        <div class="error" v-if="error">{{ error }}</div>
        <div class="content" v-if="post">
            <h2>{{ post.title }}</h2>   
            <p>{{ post.body }}</p>   
        </div>
    </div>
</template>

<script>
export default {
    data() {
        return {
            loading: false,
            post: null,
            error:null
        }
    },
    created () {
        // 组件创建完成后获取数据
        this.fetchData();
    },
    watch: {
        // 路由发生变化,会再次执行该方法
        "$route": 'fetchData'
    },
    methods: {
        fetchData () {
            this.error = this.post = null;
            this.loading = true
            // 发送请求 - 获取动态数据
            getPost(this.$route.params.id, (err, post) => {
                this.loading = false;
                if(err){
                    this.error = err.toString();
                }else{
                    this.post = post;
                }
            });
        }
    }
}
</script>

在导航前获取数据(不能添加loading提示)

在导航转入新的路由前获取数据,可以在组件的beforeRouteEnter守卫中获取数据,当数据获取成功之后调用next方法进入页面。当页面导航变化时,在beforeRouteUpdate钩子函数获取数据。

<script>
export default {
    data() {
        return {
            post: null,
            error: null
        }
    },
    beforeRouteEnter (to, from, next) {
        // 在确定进入路由之前获取数据,当数据获取成功则确定进入路由
        getPost(to.params.id, (err, post) => {
            next(vm => vm.setData(err, post)); 
        });
    },
    // 路由更新时重新获取数据
    beforeRouteUpdate(to, from, next) {
        this.post = null;
        getPost(to.params.id, (err, post) => {
            this.setData(err, post);
            next();
        });
    },
    methods: {
        setData (err, post) {
            if(err) {
                this.error = err.toString();
            }else{
                this.post = post;
            }
        }        
    }
}
</script>

十、Vue Router 进阶-获取数据

标签:状态   params   script   tle   return   efault   tostring   添加   false   

原文地址:https://www.cnblogs.com/yuxi2018/p/11967285.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!