Vue小白教程:路由配置(二)请求数据

这篇教程详细介绍了Vue动态路由的配置方法,包括两种动态路由方式的实现。通过在main.js、App.vue、News.vue和Content.vue中进行设置,实现从新闻列表到详情页的点击跳转,并在子组件中进行数据请求。教学内容适用于Vue初学者,旨在帮助理解路由管理和数据获取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、配置动态路由

//请求数据
import VueResource from 'vue-resource';
Vue.use(VueResource);
//动态路由两种方式
 {path: '/pcontent', component:Content },//第一种
 { path: '/content/:aid', component: Content}, //第二种

2、父组件添加动态路由
两种方式与下方获取路由对应即可

<router-link :to="'/content?aid='+item.aid">{{item.title}}</router-link>//第一种
<router-link :to="'/content/'+item.aid">{{item.title}}</router-link>//第二种

3、父组件传参并请求数据

this.$http.jsonp(api).then((response)=>{
	 console.log(response);
     //注意:用到this要注意this指向
     this.list=response.body.result;
     },function(err){
           console.log(err);
    })

4、子组件获取动态路由

this.$route.query//第一种动态路由
this.$route.params//第二种动态路由

5、子组件请求数据

var api='http://www.phonegap100.com/appapi.php?a=getPortalArticle&aid='+aid;
 this.$http.get(api).then((response)=>{
         console.log(response);
		 this.list=response.body.result[0];
  },(err)=>{
		 console.log(err)
  })

下面用第二种动态路由方式演示

main.js

import Vue from 'vue';
import App from './App.vue';
//请求数据
import VueResource from 'vue-resource';
Vue.use(VueResource);
//luyou
import VueRouter from 'vue-router';
Vue.use(VueRouter);

//1.创建组件
import Home from './components/Home.vue';
import News from './components/News.vue';
import Content from './components/Content.vue';
import Pcontent from './components/Pcontent.vue';

//2.配置路由   注意:名字
const routes = [
  { path: '/home', component: Home },
  { path: '/news', component: News },
  { path: '/content/:aid', component: Content },   /*动态路由*/
  { path: '/pcontent', component: Pcontent },
  { path: '*', redirect: '/home' }   /*默认跳转路由*/
]

//3.实例化VueRouter  注意:名字
const router = new VueRouter({
  routes // (缩写)相当于 routes: routes
})

//4、挂载路由
new Vue({
  el: '#app',
  router,
  render: h => h(App)
})

//5 <router-view></router-view> 放在 App.vue

App.vue

<template>
  <div id="app"> 
    <router-link to="/home">首页</router-link>
    <router-link to="/news">新闻</router-link>
    <hr>
       <router-view></router-view>
  </div>
</template>

<script>
   export default {     
      data () { 
        return {
         
         msg:'你好vue'
        }
      }
    }
</script>
<style lang="scss">
</style>

News.vue

<template>    
    <div id="news">    
       我是新闻组件   
     <ul class="list">
        <li v-for="(item,key) in list" :key="key">
             <router-link :to="'/content/'+item.aid">{{item.title}}</router-link>
        </li>
     </ul>          
    </div>
</template>


<script>
    export default{
        data(){
            return {               
               msg:'我是一个新闻组件'  ,    
               list:[]        
            }
        },
        methods:{
            requestData(){
                //jsonp请求的话  后台api接口要支持jsonp
                var api='http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=1';
                this.$http.jsonp(api).then((response)=>{
                   console.log(response);
                   this.list=response.body.result;
                },function(err){
                        console.log(err);
                })
            }
        },
        mounted(){
            this.requestData();
        }
    }
</script>

<style lang="scss" scoped>
    .list{
        li{
            height:3.4rem;
            line-height:3.4rem;
            boder-bottom:1px solid #eee;
            font-size:1.6rem;
            a{
                color:#666;
            }
        }
    }
</style>

Content.vue

<template> 
    <div id="content">    
        <h2>{{list.title}}</h2>
        <div v-html="list.content"></div>
    </div>
</template>

<script>
    export default{
        data(){
            return{
                msg:'数据',
                list:[]
            }
        },
        mounted(){
               console.log(this.$route.params);  /*获取动态路由传值*/
                var aid=this.$route.params.aid;
                //调用请求数据的方法
                this.requestData(aid);
        },
        methods:{
            requestData(aid){
                //get请求如果跨域的话 后台php java 里面要允许跨域请求
                console.log(aid);
                var api='http://www.phonegap100.com/appapi.php?a=getPortalArticle&aid='+aid;
                this.$http.get(api).then((response)=>{
                        console.log(response);
                        this.list=response.body.result[0];
                },(err)=>{
                    console.log(err)
                })
            }
        }
    }
</script>

<style lang="scss">
#content{
    padding:1rem;
    line-height:2;
    img{
        max-width:100%;
    }
}    
</style>

效果

先点击“新闻“,再点击新闻标题跳转详情页
在这里插入图片描述
注:教学内容出自视频教学IT营itying.com 大地老师Vue基础教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值