Vue中插槽(匿名插槽,具名插槽,作用域插槽)

插槽(匿名插槽,具名插槽,作用域插槽)

1.匿名插槽

1.在组件中预留空间(slot),在父组件中引用子组件时可以向空间中填充内容,这个空间就称之为插槽

//只需要一个插槽的时候  定义子组件时需要预留插槽 
Vue.component('子组件名',{
     
    template:`
		
预留的插槽
`
}) //引用子组件时需要填充插槽 <子组件>需要填充的内容</子组件>

2.具名插槽

有多个插槽,(区别哪些内容填充到哪个位置),具名插槽
自定义组件时需要预留具有名字的插槽;

Vue.component("子组件名", {
     
	template: `
		
预留的插槽 预留的插槽 预留的插槽
`
}) 引用子组件时需要指定填充哪个插槽: <子组件名> <template slot="插槽名"> 需要填充的内容 </template> <template slot="b"> 需要填充的内容 </template> <template slot="c"> 需要填充的内容 </template> </子组件名>

3.作用域插槽

  • 父组件对子组件加工处理
  • 既可以复用子组件的slot,又可以使slot内容不一致
<div id="app">
    <!-- 
		1、当我们希望li 的样式由外部使用组件的地方定义,因为可能有多种地方要使用该组件,
		但样式希望不一样 这个时候我们需要使用作用域插槽 
		
	-->  
    <fruit-list :list='list'>
       <!-- 2、 父组件中使用了<template>元素,而且包含scope="slotProps",
			slotProps在这里只是临时变量   
		---> 	
      <template slot-scope='slotProps'>
        <strong v-if='slotProps.info.id==3' class="current">
            {
     {
     slotProps.info.name}}		         
         </strong>
        <span v-else>{
     {
     slotProps.info.name}}</span>
      </template>
    </fruit-list>
  </div>
  <script type="text/javascript" src="js/vue.js"></script>
  <script type="text/javascript">
    /*
      作用域插槽
    */
    Vue.component('fruit-list', {
     
      props: ['list'],
      template: `
        
  • ### 3、 在子组件模板中,元素上有一个类似props传递数据给组件的写法msg="xxx", ### 插槽可以提供一个默认内容,如果如果父组件没有为这个插槽提供了内容,会显示默认的内容。 如果父组件为这个插槽提供了内容,则默认的内容会被替换掉 { {item.name}}
  • `
    }); var vm = new Vue({ el: '#app', data: { list: [{ id: 1, name: 'apple' },{ id: 2, name: 'orange' },{ id: 3, name: 'banana' }] } }); </script> </body> </html>

    你可能感兴趣的:(Vue,Vue插槽,匿名插槽,具名插槽,作用域插槽)