Vue3知识总结-4

Vue3知识总结-4

插槽Slots

在某些场景中,可能想要为子组件传递一些模版片段,让子组件在他们的组件中渲染这些片段

<template>
  <SlotsBase>
    <div>
      <h3>插槽标题</h3>
      <p>插槽内容</p>
    </div>
  </SlotsBase>
</template>
<script>
import SlotsBase from "@/components/SlotsBase.vue";
export default {
  components:{
    SlotsBase
  }
}
</script>
<style>

</style>

渲染作用域

插槽内容可以访问到父组件的数据作用域,因为插槽内容本心是在父组件模版中定义的

默认内容

如果没有传数据,可以有一个默认的值

具名插槽

插槽中的数据传递

需要同时使用父组件和子组件域内的数据。

具名插槽传递数据

<template>
  <SlotsBase>
    <div>
      <h3>插槽标题</h3>
      <p>插槽内容</p>
    </div>
    <template v-slot:header>
      <h3>{123}</h3>
    </template>
<!--    //简写的方式-->
    <template #main>
      <h3>{32131</h3>
    </template>
    <h3>{{message}}</h3>

    <h3>{{currentTest}}</h3>
<!--    传递数据-->
    <SlotsBase v-slot="slotProps">

        <h3>{{currentTest}}-{{slotProps.msg}}</h3>


    </SlotsBase>
<!--    具名插槽传递数据-->
    <SlotsBase>
      <template #header="slotProps">
        <h3>{{currentTest}}-{{slotProps.msg}}</h3>
      </template>
      <template #main="slotProps">
        <h3>{{currentTest}}-{{slotProps.job}}</h3>
      </template>
    </SlotsBase>

  </SlotsBase>

</template>
<script>
import SlotsBase from "@/components/SlotsBase.vue";
export default {
  data(){
    return{
      message:"插槽续集",
      currentTest:"测试内容"
    }
  },
  components:{
    SlotsBase
  }
}
</script>
<style>

</style>
<template>
  <h3>base</h3>
  <slot>插槽默认值</slot>
  <hr>
  <slot name="header">插槽默认值</slot>
  <slot name="main">插槽默认值</slot>
  <slot name="header" :msg="childMessage"></slot>
  <slot name="main" :job="jobMsg"></slot>
</template>

<script>
export default {
  data(){
    return{
      childMessage:"子组件数据",
      jobMsg:"xiyou "
    }
  }
}
</script>


<style scoped>

</style>

组件声明周期

创建到销毁的生命周期

声明周期示意图

在这里插入图片描述

<template>
  <h3>组件的生命周期</h3>
  <p>{{message}}</p>
  <button @click="updateHandle">更新数据</button>
</template>
<script>
//生命周期函数:
// 创建:beforeCreate created
// 挂载:beforeMount mounted
// 更新:beforeUpdate updated
// 销毁:beforeUnmount unmounted
export default {
  data(){
    return{
      message:"更新之前"
    }
  },
  methods:{
    updateHandle(){
      this.message = "更新之后"
    }
  },
  beforeCreate() {
    console.log("组件创建之前")
  },
  created() {
    console.log("组件创建之后")
  },
  beforeMount() {
    console.log("组件渲染之前")
  },
  mounted() {
    console.log("组件渲染之后")
  },
  beforeUpdate() {
    console.log("组件更新之前")
  },
  updated() {
    console.log("组件更新之后")
  },
  beforeUnmount() {
    console.log("组件销毁之前")
  },
  unmounted() {
    console.log("组件销毁之后")
  },


}
</script>

组件生命周期的应用

  1. 通过ref获取元素DOM结构
  2. 迷你网络请求渲染数据
<template>
  <h3>组件生命周期函数应用</h3>
  <p ref="name">程序员</p>
  <ul>
    <li v-for="(item,index) of banner" :key="index">
      <h3>{{item.title}}</h3>
      <p>{{item}}</p>
    </li>
  </ul>
</template>

<script>
export  default {
  data(){
    return{
      banner: []
    }
  },
  created() {
    this.banner = [
      {
        "title":"123",
        "content":"342"
      },
      {
        "title":"123",
        "content":"342"
      },
      {
        "title":"123",
        "content":"342"
      },
    ]
    },
  beforeMount() {
    console.log(this.$refs.name)
  },
  mounted() {
    console.log(this.$refs.name)
  },
}
</script>


<style scoped>

</style>

动态组件

<template>
  <component :is="tabComponent"></component>
  <button @click="changeHandler">切换组件</button>
<!--<ComponentA/>-->
<!--<ComponentB/>-->
</template>

<script>

import ComponentA from "@/components/ComponentA.vue"
import ComponentB from "@/components/ComponentB.vue"
export default {
  data(){
    return {
      tabComponent:"ComponentA"
    }
  },
  components:{
    ComponentA,
    ComponentB
  },
  methods:{
    changeHandler(){
  this.tabComponent = this.tabComponent == "ComponentA" ? "ComponentB" : "ComponentA"
    }
  }
}
</script>

组件保持存活

当使用在多个组件切换时候,被切换掉的组件会被卸载,可以用过组件强制被切换掉的组件任然保持“存活状态”

组件被卸载

<keep-alive>
  <component :is="tabComponent"></component>
</keep-alive>

异步组件

同步:多个功能,一个一个执行

异步:多个动能,同时运行

依赖注入

Provide 和inject只能由上往下传递

<template>
<h3>Child</h3>
  <p>{{title}}</p>
  <p>{{message}}</p>
</template>

<script >
export default {
  inject: ['message'],
  props:{
    title:{
      type:String
    },

  }
}

</script>

<style>

</style>
<template>
<h3>祖宗</h3>
  <Parent title="祖宗的财产"/>
</template>
<script>
import Parent from "@/components/Parent.vue";
export default {
  data(){
    return{
      message:"123"
    }
  } ,
  components:{
    Parent
  },
  // provide:{
  //   message:"213"
  // }
  provide(){
    return {
      message: this.message
    }
  }
}
</script>
  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue是一个流行的JavaScript框架,用于构建用户界面。它是基于组件化和响应式设计的,可以帮助开发者更高效地构建交互式的web应用程序。Vue-Video-Player是一个用于Vue框架的视频播放插件,它基于video.js并提供了一些方便的功能和接口来实现视频播放功能。你可以通过使用npm命令来安装vue-video-player插件,具体命令是npm install vue-video-player --save。然后,在你的Vue代码中,你可以引入vue-video-player组件,并根据需要传递一些配置选项,例如设置视频源、自定义皮肤等。下面是一个简单的示例代码: ```html <div> <video-player class="video-player vjs-custom-skin v-player" ref="videoPlayer" :playsinline="true" :options="playerOptions"></video-player> </div> ``` 这个demo代码使用了vue-video-player插件,并且通过video-player组件来展示一个视频播放器,其中的class属性用于自定义样式,ref属性用于引用video-player组件的实例,:playsinline属性用于启用内联播放,:options属性用于传递一些配置选项给video-player组件。这样,你就可以在Vue应用中轻松地使用vue-video-player插件来实现视频播放的功能了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [前端vue视频vue-video-player插件总结知识点案例(带源码)](https://blog.csdn.net/m0_49714202/article/details/125312364)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [vue播放视频之vue-video-player插件详解](https://blog.csdn.net/wang_1220/article/details/108472240)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [vue-video-player.zip](https://download.csdn.net/download/wang_1220/12825804)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值