Vue路由结合请求数据 实现新闻列表 新闻详情数据渲染
main.js
import Vue from 'vue'; import App from './App.vue'; //引入公共的scss 注意:创建项目的时候必须用scss import './assets/css/basic.scss'; //请求数据 import VueResource from 'vue-resource'; Vue.use(VueResource); 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'; //2.配置路由 注意:名字 const routes = [ { path: '/home', component: Home }, { path: '/news', component: News }, { path: '/content/:aid', component: Content }, /*动态路由*/ { 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"> <header class="header"> <router-link to="/home">首页</router-link> <router-link to="/news">新闻</router-link> </header> <hr> <router-view></router-view> </div> </template> <script> /*1、不同路由传值:动态路由 1、配置动态路由 routes: [ // 动态路径参数 以冒号开头 { path: '/user/:id', component: User } ] 2、在对应的页面 this.$route.params获取动态路由的值 */ export default { data () { return { msg:'你好vue' } } } </script> <style lang="scss"> .header{ height:4.4rem; background:#000; color:#fff; line-height:4.4rem; text-align:center; a{ color:#fff; padding:0 2rem } } </style>
News.vue
<template> <div id="news"> 我是新闻组件 <ul class="list"> <li v-for="(item,key) in list"> <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要注意this指向 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 里面要允许跨域请求 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>