vue-cli(四)

向下传递数据

这里childslot是parentslot的子类,所以可以向下传递数据。

这里是直接使用child-slot标签进行传递数据,然后由props来接收数据

<template>
  <div class="parentslot">
    <child-slot title="美食" :foods="foods"></child-slot>
    <child-slot title="游戏" :games="games"></child-slot>
    <child-slot title="电影" :movies="movies"></child-slot> 
  </div>
</template>

<script>
import ChildSlot from './ChildSlot.vue';
export default{
  name:"ParentSlot",
  data(){
    return{
      foods :["锅包肉","东北大拉皮","红烧肉","小鸡炖蘑菇"],
      games :["王者荣耀","蛋仔派对","连连看","原神"],
      movies :["阿甘正传","泰塔尼克号","云边有个小卖部","白鹿原"]
    }
  },
  components:{
    ChildSlot
  }
}
</script>
<template>
  <div class="childslot">
    <h2>{{ title }}分类</h2>
    <ul v-for="(value,index) in foods" :key="index">
        <li>{{ value }}</li>
    </ul>
    <ul v-for="(value,index) in games" :key="index">
        <li>{{ value }}</li>
    </ul>
    <ul v-for="(value,index) in movies" :key="index">
        <li>{{ value }}</li>
    </ul> 
  </div>
</template>

<script >
export default{
    name:"ChildSlot",
    data(){
        return {

        }
    },
    props:["foods","games","movies"],
    
}

使用slot插槽进行数据的传递

这里是需要传递的数据,

child-slot可以给子类传递数据

    <child-slot title="美食" >
      <img src="../../../assets/logo.png">
    </child-slot>
    <child-slot title="游戏" >
      <ul>
        <li>王者</li>
        <li>蛋仔</li>
        <li>连连看</li>
        <li>原神</li>
      </ul>
    </child-slot>
    <child-slot title="电影" >
      <img src="../../../assets/11.png" alt="" >
    </child-slot>

在子类用slot标签进行接收并显示

<slot></slot>

这是把父类中的所有没有命名的child-slot全部展示,有名字的child-slot则不展示。

给slot命名

    <child-slot title="美食" >
      <img src="../../../assets/logo.png" slot="one">
    </child-slot>

这个slot现在有一个名字叫做one,

如果子类有slot调用名字叫做one,slot才会显示

<slot name="one"></slot>

否则不会显示。

slot的默认值

如果有的child-slot中间没有内容,还会独占模块,这显然是不行的。

我们可以给它设定默认值:

可以设置为图片,视屏,文字等都可以。

<slot>这是默认值2</slot>

通过事件总线传递数据

这里是通过vue.js实例化一个vue对象,然后定义一个全局事件总线,通过全局事件总线进行数据传递,当然,数据传递需要在同一个文件中进行,否则需要通过路由来实现。

<template>
  <div class="parentbus">
    <first-bus></first-bus>
    <second-bus></second-bus>
  </div>
</template>

<script>
import FirstBus from './FirstBus.vue';
import SecondBus from './SecondBus.vue';
export default{
    name:"ParentBus",
    data(){
        return {
            newstr:" "
        }
    },
    components:{
        FirstBus,
        SecondBus
    },
    mounted(){

    }
}
</script>
<template>
  <div class="firstbus">
    <button @click="eventStr">first组件</button>
  </div>
</template>

<script>
import bus from '@/bus/bus';
export default{
    name:"FirstBus",
    data(){
        return{
            str:"这是first中的数据"
        }
    },
    methods:{
        eventStr(){
            // bus.$emit("sendVal",this.str);
            this.$bus.$emit("sendVal",this.str);
        }
    }
}
</script>
<template>

</template>

<script>
import bus from '@/bus/bus';
export default{
    name:"SecondBus",
    mounted(){
        bus.$on("sendVal",(value)=>{
            console.log("second中接收的value",value)
        }),
        this.$bus.$on("sendVal",(value)=>{
            console.log("second中接收的value:",value);
        })
    },
    destroyed(){
        // bus.$off("sendVal");
        this.$bus.$off("sendVal");
    }
}
</script>
import Vue from "vue";
export default new Vue();

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿究院-Cu-Sn合金

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值