Vue路由及默认路由的跳转

https://router.vuejs.org/

vue路由配置:
    1.安装 
    npm install vue-router  --save   / cnpm install vue-router  --save
    
                2、引入并 Vue.use(VueRouter)   (main.js)
 
        import VueRouter from 'vue-router'

        Vue.use(VueRouter)
    
    3、配置路由
        
        1、创建组件 引入组件

        2、定义路由  (建议复制s)

            const routes = [
              { path: '/foo', component: Foo },
              { path: '/bar', component: Bar },
              { 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>         

        6、路由跳转
        <router-link to="/foo">Go to Foo</router-link>
         <router-link to="/bar">Go to Bar</router-link>
代码实现如下
src/components/Home.vue

<template>
    <!-- 所有的内容要被根节点包含起来 -->
    <div id="home">    
       我是首页组件
    </div>
</template>
<script>
    export default{
        data(){
            return {               
               msg:'我是一个home组件'
            }
        }
    }
</script>
<style lang="scss" scoped>  
</style>

src/components/News.vue

<template>    
    <div id="news">    
       我是新闻组件                   
    </div>
</template>
<script>
    export default{
        data(){
            return {               
               msg:'我是一个新闻组件'              
            }
        }
    }
</script>
<style lang="scss" scoped>    
</style>

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>

main.js


import Vue from 'vue';
import App from './App.vue';

import VueRouter from 'vue-router';
Vue.use(VueRouter);
//1.创建组件
import Home from './components/Home.vue';
import News from './components/News.vue';
//2.配置路由   注意:名字
const routes = [
  { path: '/home', component: Home },
  { path: '/news', component: News },
  { 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
Vue动态路由get传参
src/components/Content.vue

<template>   
    <div id="content">    
       我是详情页面
    </div>
</template>
<script>    
    export default{
        data(){
            return{
                msg:'数据'
            }
        },
        mounted(){
                console.log(this.$route.params);  /*获取动态路由传值*/
        }
    }
</script


src/components/Home.vue

<template>
    <!-- 所有的内容要被根节点包含起来 -->
    <div id="home">    
       我是首页组件
        <ul>
            <li v-for="(item,key) in list">
                <router-link :to="'/pcontent?id='+key">{{key}}--{{item}}</router-link>
            </li>
        </ul>
    </div>
</template>
<script>
    export default{
        data(){
            return {               
               msg:'我是一个home组件',
               list:['商品111111','商品222222','商品333333']    
            }
        }
    }
</script>
<style lang="scss" scoped> 
</style>

src/components/News.vue

<template>    
    <div id="news">    
       我是新闻组件   
     <ul>
        <li v-for="(item,key) in list">
             <router-link :to="'/content/'+key">{{key}}--{{item}}</router-link>
        </li>
     </ul>         
    </div>
</template>
<script>
    export default{
        data(){
            return {               
               msg:'我是一个新闻组件'  ,    
               list:['111111','222222','333333']        
            }
        }
    }
</script>
<style lang="scss" scoped>    
</style>

src/components/Pcontent.vue

<template>   
    <div id="content">    
      商品详情
    </div>
</template>
<script>    
    export default{
        data(){
            return{
                msg:'数据'
            }
        },
        mounted(){
              //获取get传值
              console.log(this.$route.query);
        }
    }
</script>

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>
/*1、不同路由传值:动态路由
    1、配置动态路由
       routes: [
        // 动态路径参数 以冒号开头
        { path: '/user/:id', component: User }
      ]
    2、在对应的页面
      this.$route.params获取动态路由的值
*/
   export default {     
      data () { 
        return {         
         msg:'你好vue'
        }
      }   
    }
</script>
<style lang="scss">
</style>

main.js

import Vue from 'vue';
import App from './App.vue';
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
vue路由结合请求数据 实现新闻列表 新闻详情数据渲染

代码如下

  src/components/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>

Home.vue

<template>
    <!-- 所有的内容要被根节点包含起来 -->
    <div id="home">    
       我是首页组件       
    </div>
</template>
<script>
    export default{
        data(){
            return {               
               msg:'我是一个home组件'             
            }
        }
    }
</script>
<style lang="scss" scoped>    
</style>

src/component/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>

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>

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
vue路由编程式的导航 以及vue路由HIstory模式 hash模式
<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>


<template>
    <!-- 所有的内容要被根节点包含起来 -->
    <div id="home">    
       我是首页组件
        <button @click="goNews()">通过js跳转到新闻页面</button>   
    </div>
</template>
<script>
    export default{
        data(){
            return {               
               msg:'我是一个home组件'            
            }
        },
        methods:{
            goNews(){
                // 注意:官方文档写错了
                //第一种跳转方式
                // this.$router.push({ path: 'news' })
                // this.$router.push({ path: '/content/495' });
                //另一种跳转方式
                    //   { path: '/news', component: News,name:'news' },
                    // router.push({ name: 'news', params: { userId: 123 }})
                    this.$router.push({ name: 'news'})
            }
        }
    }
</script>
<style lang="scss" scoped>
</style>


<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>

<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>


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,name:'news' },
  { path: '/content/:aid', component: Content },   /*动态路由*/
  { path: '*', redirect: '/home' }   /*默认跳转路由*/
]
//3.实例化VueRouter  注意:名字
const router = new VueRouter({
  mode: 'history',   /*hash模式改为history*/
  routes // (缩写)相当于 routes: routes
})
//4、挂载路由
new Vue({
  el: '#app',
  router,
  render: h => h(App)
})
//5 <router-view></router-view> 放在 App.vue

Vue中路由的嵌套

component组件

<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>


<template>
    <!-- 所有的内容要被根节点包含起来 -->
    <div id="home">    
       我是首页组件
        <button @click="goNews()">通过js跳转到新闻页面</button>       
    </div>
</template>
<script>
    export default{
        data(){
            return {               
               msg:'我是一个home组件'           
            }
        },
        methods:{
            goNews(){
                // 注意:官方文档写错了
                //第一种跳转方式
                // this.$router.push({ path: 'news' })
                // this.$router.push({ path: '/content/495' });
                //另一种跳转方式
                    //   { path: '/news', component: News,name:'news' },
                    // router.push({ name: 'news', params: { userId: 123 }})
                    this.$router.push({ name: 'news'})
            }
        }
    }
</script>
<style lang="scss" scoped>
</style>


<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>


<template>
    <!-- 所有的内容要被根节点包含起来 -->
    <div id="user">          
        <div class="user">       
                    <div class="left">    
                        <ul>
                            <li>
                               <router-link to="/user/useradd"> 增加用户</router-link>
                            </li>
                            <li>
                                 <router-link to="/user/userlist"> 用户列表</router-link>
                            </li>
                        </ul>               
                    </div>
                    <div class="right">          
                         <router-view></router-view>       
                     </div>      
         </div>       
    </div>
</template>
<script>
    export default{
        data(){
            return {               
               msg:'我是一个user组件'             
            }
        }       
    }

</script>
<style lang="scss" scoped>
    .user{
        display:flex;
        .left{
            width:200px;
            min-height:400px;
            border-right:1px solid #eee;
            li{
                line-height:2;
            }
        }
        .right{
            flex:1;
        }
    }
</style>


component/user/UserAdd.vue

<template>
    <div id="adduser">    
        增加用户
    </div>
</template>


component/user/UserList.vue
<template>
    <div id="adduser">    
        用户列表
    </div>
</template>



App.vue


<template>
  <div id="app"> 
    <header class="header">
      <router-link to="/home">首页</router-link>
      <router-link to="/news">新闻</router-link>
       <router-link to="/user/useradd">用户</router-link>
    </header>
    <hr>
       <router-view></router-view>
  </div>
</template>
<script>
   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>


import Vue from 'vue';
import App from './App.vue';

//引入公共的scss   注意:创建项目的时候必须用scss
import './assets/css/basic.scss';   
/*路由的嵌套
  1.配置路由
   {
      path: '/user',
      component: User,
      children:[
        { path: 'useradd', component: UserAdd },

        { path: 'userlist', component: Userlist }

      ]

    }

  2.父路由里面配置子路由显示的地方   <router-view></router-view>
*/
//请求数据
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';
import User from './components/User.vue';
  import UserAdd from './components/User/UserAdd.vue';
  import Userlist from './components/User/Userlist.vue';
//2.配置路由   注意:名字
const routes = [
  { path: '/home', component: Home },
  { path: '/news', component: News,name:'news' },
  {       
    path: '/user',  
    component: User,
    children:[
      { path: 'useradd', component: UserAdd },
      { path: 'userlist', component: Userlist }
    ]
  },
  { path: '/content/:aid', component: Content },   /*动态路由*/
  { path: '*', redirect: '/home' }   /*默认跳转路由*/
]
//3.实例化VueRouter  注意:名字
const router = new VueRouter({
  mode: 'history',   /*hash模式改为history*/
  routes // (缩写)相当于 routes: routes
})

//4、挂载路由
new Vue({
  el: '#app',
  router,
  render: h => h(App)
})
//5 <router-view></router-view> 放在 App.vue
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,106评论 6 542
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,441评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,211评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,736评论 1 317
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,475评论 6 412
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,834评论 1 328
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,829评论 3 446
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,009评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,559评论 1 335
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,306评论 3 358
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,516评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,038评论 5 363
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,728评论 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,132评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,443评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,249评论 3 399
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,484评论 2 379

推荐阅读更多精彩内容