20.Vue slot插槽

  我们前面讲过传值,今天讲的是可以直接传一个标签,通过slot插槽实现;

主要作用:

  某一个区块,先占位,然后可以动态的搞个标签进去,方便切换该位置的内容,无需再搞多个页面;

  新建Foot.vue

  假如引入该组件的父组件没有给插槽设置内容,那默认就显示 ‘’要被替换的内容‘’;

  如果设置了内容,那将被替换掉;

<template>
  <div class="foot">
    <!--这里的  <slot name="f">要被替换的内容</slot> 就是定义了一个插槽;以及取名f;-->
    <slot name="f">要被替换的内容</slot>
  </div>
</template>

<script>
    export default {
        name: "Foot"
    }
</script>

<style scoped>
  .foot{
    padding: 20px;
  }
</style>

  然后App.vue里动态的设置标签内容,来实现动态的替换;

<template>
  <div>
    <!--声明标签-->
    <Menu :menus="menus" :webSite="webSite"></Menu>
    <Foot>
      <!--指定插槽内容-->
      <div slot="f">
        vue
      </div>
    </Foot>
  </div>
</template>

<script>
  import PubSub from 'pubsub-js'
  import Menu from './components/Menu'  // 引入组件
  import Foot from "./components/Foot";
  export default {
    name: 'App',
    components:{
      Menu:Menu,  // 映射组件标签,ES6中属性名和属性值相同可以省略属性值只写属性名
      Foot
    },
    data(){
      return { //定义菜单的对象数组,将其传递给子组件
        menus:[{id:1,name:'科技'},{id:2,name:'文化'},{id:3,name:'政治'}],
        webSite:{url:'https://cn.vuejs.org/',title:'Vue.js官网'}
      }
    },
    methods:{
      addMenu(menu){
        this.menus.push(menu)
      }
    },
    mounted() {
      // 订阅消息,相当于前面的绑定事件监听;
      // 订阅消息,参数一 消息名  参数二 处理的回调函数
      PubSub.subscribe('add',(msg,data)=>{
        console.log("msg:"+msg)
        console.log("data:"+data)
        this.addMenu(data);
      })
    }
  }
</script>

<style scoped>
</style>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值