十、Vue Router 进阶-获取数据

获取数据的两种方式

  • 导航完成之后获取数据:先完成导航,然后在接下来的组件生命周期钩子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>

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

时间: 2024-08-29 07:47:17

十、Vue Router 进阶-获取数据的相关文章

vue router 参数获取

vue router 参数获取通常是通过$route.query和$route.params方法这里将这两种方式通过代码展示出来: 路由代码: import Vue from 'vue' import Router from 'vue-router' import Home from './views/Home.vue' import UserAdd from './components/UserAdd' import UserList from './components/UserList'

vue使用jsonp获取数据,开发热卖推荐组件

1.安装jsonp cnpm install --save jsonp 2.jsonp API jsonp( url, opts, fn ) 3.封装jsonp方法 src/assets/js/jsonp.js import jsonp from 'jsonp'; /*data格式案例 { id:1, name:'cyy' } */ const parseParam=param=>{ /*将data格式转换为 [ [id,1], [name,cyy] ] */ let arr=[]; for(c

九、Vue Router 进阶-路由元信息meta

路由元信息 meta 在路由列表中,每个路由都有一个 meta元数据字段,我们可以在这里配置一些自定义信息,供页面组件或路由钩子函数中使用.在路由跳转的时候,提供我们判断条件. <script> // 配置 meta 数据 const router = new VueRouter({ routes: [ { path: '/', name: 'index', // 路由名称 component: index, // 映射的组件 meta: { title: '首页' } } ] }); <

八、Vue Router 进阶-导航守卫

导航守卫 所谓的导航守卫,就是路由的钩子函数.主要用来通过跳转或取消导航.导航守卫分三种:全局.路由独享.组件级的. 注意:参数或查询的改变并不会触发进入和离开的导航守卫.可以通过watch监听$route对象,或使用beforeRouteUpdate的组件内守卫. 全局前置守卫 进入路由之前的钩子函数,接受next函数,在此可以阻止进入路由或跳转到指定路由. <script> const router = new VueRouter({ ... }); // 接收三个参数:to为目标路由对象

vue项目模拟后台数据

这次我们来模拟一些后台数据,然后去请求它并且将其渲染到界面上.关于项目的搭建鄙人斗胆向大家推荐我的一篇随笔<Vue开发环境搭建及热更新> 一.数据建立 我这里为了演示这个过程所以自己编写了这个data.json文件 1 { 2 "school":{ 3 "students":[ 4 { 5 "name":"方毅", 6 "sex":"男", 7 "age"

VUE+axios+php获取后端数据(宝塔面板)

总是听别人说axios好,好在哪里咱也不知道,继上一篇博文还不懂axios,现在稍微可以应用了(暗暗加油!) 看官网教程的时候一直困惑axios里的url到底是什么,很长一个url链接搞的我更迷惑了(其实就是一个PHP文件,读取php文件获得数据而已) vue用axios方法从后端获取数据(感觉确实方便了不少) 附上前端代码 <!DOCTYPE html> <html> <!-- head中引入了element,vue,vue-router,axios --> <

vue 中使用 AJAX获取数据的方法

在VUE开发时,数据可以使用jquery和vue-resource来获取数据.在获取数据时,一定需要给一个数据初始值. 看下例: <script type="text/javascript"> new Vue({ el:'#app', data:{data:""}, created:function(){ var url="json.jsp"; var _self=this; $.get(url,function(data){ _se

用Vue来实现音乐播放器(十四):歌手数据接口抓取

第一步:在api文件夹下创建一个singer.js文件 返回一个getSingerList()方法  使他能够在singer.vue中调用 import jsonp from '../common/js/jsonp.js' import {commonParams,options} from './config.js' export function getSingerList() { const url = 'https://c.y.qq.com/v8/fcg-bin/v8.fcg' cons

VUE通过索引值获取数据不渲染的问题

问题:vue里面当通过索引值获取数据时,ajax数据成功返回,但是在火狐下不渲染 解决: 原文地址:https://www.cnblogs.com/zjp-/p/10306665.html