vue外卖四:抽取公共组件TopHeader——slot的使用、父传子值

一、抽取公共组件TopHeader.vue

1.从Msite.vue抽取头部标题到src/components/TopHeader/TopHeader.vue

知识点1. 子组件接收父组件传值

  1. 模板内留下接收位置:
<!--1.接收父组件传值,名为title-->
<span class="header_title_text ellipsis">{{title}}</span>
  1. script设置接收值的类型,注意首字母大写
//2.接收父组件传的值为title,类型为String
    props:{
      title:String
    }

知识点2.留下插槽位置

<!--3.插槽1,name:left-->
    <slot name="left"></slot>
     <!--4.插槽2,name:right-->
    <slot name="right"></slot>

TopHeader.vue完整代码

<!--首页头部-->
<template>
  <header class="header">
  <!--3.插槽1,name:left-->
    <slot name="left"></slot>
    <span class="header_title">
    <!--1.接收父组件传值,名为title-->
      <span class="header_title_text ellipsis">{{title}}</span>
    </span>
    <!--4.插槽2,name:right-->
    <slot name="right"></slot>
  </header>
</template>

<script>
  export default {
  //2.接收父组件传的值为title,类型为String
    props:{
      title:String
    }
  }
</script>

<style lang="stylus">
  .header
    background-color #02a774
    position fixed
    z-index 100
    left 0
    top 0
    width 100%
    height 45px
    .header_search
      position absolute
      left 15px
      top 50%
      transform translateY(-50%)
      width 10%
      height 50%
      .icon-sousuo
        font-size 25px
        color #fff
    .header_title
      position absolute
      top 50%
      left 50%
      transform translate(-50%, -50%)
      width 50%
      color #fff
      text-align center
      .header_title_text
        font-size 20px
        color #fff
        display block
    .header_login
      font-size 14px
      color #fff
      position absolute
      right 15px
      top 50%
      transform translateY(-50%)
      .header_login_text
        color #fff
</style>

二.使用公共组件:父传子值,使用插槽

1.msite.vue使用插槽,向子传值

1)引入子组件,并挂载

<script>
import TopHeader from '../../components/TopHeader/TopHeader.vue'
export default{
	components:{
		TopHeader,
	}
}
</script>

2)使用子组件,并传值,使用插槽

1.把原header删除,改为如下,重点:0-2

<!--首页头部-->
		<!--0.用title向子组件传值-->
        <TopHeader title='首页-昌平区北七家宏福科技园(337省道北)'>
        <!--1.使用插槽:左-->
	        <span class="header_search" slot='left'>
	            <i class="iconfont icon-sousuo"></i>
	        </span>
	     <!--2.使用插槽:右-->
	        <span class="header_login" slot='right'>
            	<span class="header_login_text">登录|注册</span>
          	</span>
        </TopHeader>

2.search.vue使用topHeader

<template>
<section class="search">
      	<!-- 头部标题组件 -->
        <TopHeader title="搜索"/>
        略过...
</template>

<script>
import TopHeader from '../../components/TopHeader/TopHeader.vue'
export default{
	components:{
		TopHeader,
	}
}
</script>

注意:style内header相关样式别忘记删除

3.order.vue/profile.vue同2,只title变动略过

效果不变

posted @ 2020-11-07 11:19  晨光曦微  阅读(339)  评论(0编辑  收藏  举报