Vue(小案例_vue+axios仿手机app)_公共组件(路由组件传参)

 

一、前言                                                                              

                   1、公共轮播图的实现

                   2、组件传参,公共组件的实现

二、主要内容                                                                       

1、公共轮播图的实现

  (1)分析:当渲染不同的轮播图页面的时候,①轮播图的图片数据不一样,②轮播图的高度可能不一样(可以通过之前父子组件传参)

  (2)在Common文件夹下创建公共组件MySwiper

  (3)在main.js中注册全局的轮播组件

//注册全局的轮播图组件
import MySwiper from '@/components/Common/MySwiper'
Vue.component(MySwiper.name, MySwiper);

  (4)父组件引入该轮播组件的时候引入轮播组件需要的参数

//给父组件一定要参数,直接用字符串方式传递  
//url为请求的地址,   myHeight为轮播图的高度

<MySwiper url='getlunbo' myHeight='250px'/>

  (5)在公共轮播组件中接收参数,并且使用(如果有些请求的地址带有参数,可以先在父组件那边用$route.params.id拿到对应的id, 在拼接到url里面)

<template>
     <mt-swipe :auto="4000" :style="{height:myHeight}">  
      <!-- v-for组件的时候需要给key,避免vue计算key,来提升性能 -->
      <!-- key就是位置的标识 -->
        <mt-swipe-item v-for="(item,index) in imgs" :key="index" >    
        </mt-swipe-item>
      </mt-swipe>
</template>
<script>
    export default {
        name:'MySwiper',
        data(){
            return {
                imgs:[],            
            }
        },
        props:['url','myHeight'],  //接收到父组件那边来的请求地址,和高度
        created(){
            this.$axios.get(this.url)  //这里用到接收到的url
            .then(res=>{
                console.log(res.data.message);
                this.imgs = res.data.message;
            })
            .catch(err=>{
                console.log('轮播图异常',err)
            })
        }
    }
</script>
<style scoped>
.mint-swipe {
    width: 100%;
    height:200px;
}
.mint-swipe img {
  width: 100%;
} 
</style>

 

2、组件传参,公共组件的实现

  (1)分析:如下所示,下面的这两个页面也有两处不同 ①请求的url地址不同, ②title标题不同

               

  (2)建立一个公共组件newsDetail  并在index.js中声明

 import newsDetail from '@/components/NewsList/newsDatail'

export default new Router({
 
 routes: [
    {
      path:'/news/detail',
      name:'detail',
      component: newsDetail,
      props:{
        title:'新闻详情'      //在跳转的时候直接将这个title传递到公共组件里面
      }
    },

     //商品图文介绍
    {
      path:'/goods/photo/info',
      name:'photo.info',
      component:newsDetail,//图文介绍和newsDetail公用的是同一个组件
      props:{
        title:'图文介绍'
      }
    }
  ]
})

  (3)在公共组件中使用props接收

 <Navbar :title='title'></Navbar>
        
 </div>
</template>
<script type="text/javascript">
    export default  {
        name:'newsdetail',

        data(){
            return{          
            }
        },
        props:['title']
}

 

三、总结                                                                              

 

参考:vue-router官方文档:https://router.vuejs.org/zh/guide/essentials/passing-props.html

 

posted @ 2019-04-14 10:53  mysunshine_SZZ  阅读(389)  评论(0编辑  收藏  举报