vue中slot插槽总结(干货)

组件插槽

  • 组件的最大特性就是复用性,而用好插槽能大大提高组件的可复用能力
匿名插槽

  <div id="app">
    <!-- 这里的所有组件标签中嵌套的内容会替换掉slot  如果不传值 则使用 slot 中的默认值  -->  
    <alert-box>有bug发生</alert-box>
    <alert-box>有一个警告</alert-box>
    <alert-box></alert-box>
  </div>

  <script type="text/javascript">
    /*
      组件插槽:父组件向子组件传递内容
    */
    Vue.component('alert-box', {
      template: `
        <div>
          <strong>ERROR:</strong>
		# 当组件渲染的时候,这个 <slot> 元素将会被替换为“组件标签中嵌套的内容”。
		# 插槽内可以包含任何模板代码,包括 HTML
          <slot>默认内容</slot>
        </div>
      `
    });
    var vm = new Vue({
      el: '#app',
      data: {
        
      }
    });
  </script>
</body>
</html>

具名插槽
  • 具有名字的插槽
  • 使用 中的 “name” 属性绑定元素

  <div id="app">
    <base-layout>
       <!-- 2、 通过slot属性来指定, 这个slot的值必须和下面slot组件得name值对应上
				如果没有匹配到 则放到匿名的插槽中   --> 
      <p slot='header'>标题信息</p>
      <p>主要内容1</p>
      <p>主要内容2</p>
      <p slot='footer'>底部信息信息</p>
    </base-layout>

    <base-layout>
      <!-- 注意点:template临时的包裹标签最终不会渲染到页面上     -->  
      <template slot='header'>
        <p>标题信息1</p>
        <p>标题信息2</p>
      </template>
      <p>主要内容1</p>
      <p>主要内容2</p>
      <template slot='footer'>
        <p>底部信息信息1</p>
        <p>底部信息信息2</p>
      </template>
    </base-layout>
  </div>
  <script type="text/javascript" src="js/vue.js"></script>
  <script type="text/javascript">
    /*
      具名插槽
    */
    Vue.component('base-layout', {
      template: `
        <div>
          <header>
			###	1、 使用 <slot> 中的 "name" 属性绑定元素 指定当前插槽的名字
            <slot name='header'></slot>
          </header>
          <main>
            <slot></slot>
          </main>
          <footer>
			###  注意点: 
			###  具名插槽的渲染顺序,完全取决于模板,而不是取决于父组件中元素的顺序
            <slot name='footer'></slot>
          </footer>
        </div>
      `
    });
    var vm = new Vue({
      el: '#app',
      data: {
        
      }
    });
  </script>
</body>
</html>

作用域插槽
  • 父组件对子组件加工处理
  • 既可以复用子组件的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: `
        <div>
          <li :key='item.id' v-for='item in list'>
			###  3、 在子组件模板中,<slot>元素上有一个类似props传递数据给组件的写法msg="xxx",
			###   插槽可以提供一个默认内容,如果如果父组件没有为这个插槽提供了内容,会显示默认的内容。
					如果父组件为这个插槽提供了内容,则默认的内容会被替换掉
            <slot :info='item'>{{item.name}}</slot>
          </li>
        </div>
      `
    });
    var vm = new Vue({
      el: '#app',
      data: {
        list: [{
          id: 1,
          name: 'apple'
        },{
          id: 2,
          name: 'orange'
        },{
          id: 3,
          name: 'banana'
        }]
      }
    });
  </script>
</body>
</html>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 感谢您的提问,我可以回答这个问题。在 Vue 插槽是一种将内容分发到组件指定位置的方式。通过使用 <slot> 标签,我们可以在组件定义插槽,并在使用组件时,将内容插入到插槽。如果需要在插槽插入组件,可以使用 <component> 标签来实现。 ### 回答2: Vue插槽slot)是一种用来扩展组件的机制,允许我们在组件定义一些可插入的内容。可以将插槽看作是组件的占位符,通过插槽,我们可以将自定义的内容插入到组件。 在Vue使用插槽非常简单。首先,在父组件定义一个插槽,可以使用`<slot>`标签来定义。例如: ```html <template> <div> <slot></slot> </div> </template> ``` 在子组件,我们可以使用`<父组件名></父组件名>`的形式来插入父组件插槽。例如: ```html <template> <div> <父组件名> <p>插入到插槽的内容</p> </父组件名> </div> </template> ``` 这样,子组件的`<p>插入到插槽的内容</p>`就会被插入到父组件定义的插槽。 除了默认插槽外,Vue还支持具名插槽。具名插槽允许我们在组件定义多个插槽,并通过指定插槽的名称来插入内容。例如: ```html <template> <div> <slot name="header"></slot> <slot name="body"></slot> <slot name="footer"></slot> </div> </template> ``` 在子组件,我们可以使用`<template slot="插槽名称">插入的内容</template>`的形式来指定插入到具名插槽的内容。例如: ```html <template> <div> <父组件名> <template slot="header"> <p>插入到header插槽的内容</p> </template> <template slot="body"> <p>插入到body插槽的内容</p> </template> <template slot="footer"> <p>插入到footer插槽的内容</p> </template> </父组件名> </div> </template> ``` 这样,子组件的内容就会被插入到对应的具名插槽总结来说,Vue插槽机制非常灵活,可以满足不同组件的需求。通过插槽,我们可以在父组件定义一些可插入的内容,并在子组件指定要插入的内容,实现组件的扩展和定制。 ### 回答3: Vue插槽slot)是一种组件通信的方式,它允许父组件向子组件传递内容,使得子组件可以在特定位置插入具体的内容。 在Vue使用插槽步骤如下: 1. 在父组件定义插槽。可以使用`<template>`标签或者具名插槽来定义插槽的位置。例如: ``` <template> <div> <slot></slot> </div> </template> ``` 2. 在父组件引用子组件,并在子组件标签使用插槽。例如: ``` <template> <div> <child-component> 这里是插入到插槽的内容 </child-component> </div> </template> ``` 3. 在子组件使用插槽。可以使用`<slot>`标签在子组件定义插槽的位置,也可以使用具名插槽来定义多个插槽位置。例如: ``` <template> <div> <slot></slot> </div> </template> ``` 通过上述步骤,父组件的内容将会通过插槽传递到子组件,并在特定位置进行插入。 插槽使用可以增强组件的灵活性,使得组件可以根据需要插入不同的内容,实现更加个性化的界面效果。同时,插槽也可以结合作用域插槽、具名插槽等特性,实现更加复杂的组件通信和内容控制逻辑。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值