vue插槽

插槽

  1. 作用:让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适用于 父组件 ===> 子组件

  2. 分类:默认插槽、具名插槽、作用域插槽

  3. 使用方式:

1. 默认插槽:

vue       父组件中:                                

html结构1
                    子组件中:                    

vue插槽_第1张图片

vue插槽_第2张图片
   
      >     ​    可以看到,在父组件的子组件标签中存在内容时,子组件插槽中的默认内容就不会展示,但在父组件的子组件标签中没有内容的时候,就会显示插槽中的默认内容
   
      vue插槽_第3张图片
   
      vue插槽_第4张图片
   
   2. 具名插槽:
   
      vue       父组件中:                                                                              子组件中:                    
   
      vue插槽_第5张图片
   
      ​                                                                  vue插槽_第6张图片     
   
      > ​    显而易见的,在父组件中,slot有两种写法 , slot =‘xxx’ 和 v-slot:xxx ; 
      >
      > ​    其次,插槽并非捆绑 template 标签 使用, 但是考虑到标签本身携带的特性,在template 标签中使用基本上可以应对所有情况. 而且绑定在其他标签上还有可能出现下面这种情况:
   
      vue插槽_第7张图片
   
      vue插槽_第8张图片
   
      >     ​    绑定在div上的box1 并没有照预期的一样显示 slot:box1中的默认数据,而是整个消失了,在页面中对应位置甚至没有出现空的div标签,说明使用类似标签来绑定slot的时候大概也会出现类似的问题,即,即便绑定的容器是空的,也一样会使用这个容器的内容,而非子组件插槽的默认内容
   
      
   
   3. 作用域插槽:
   
      1. 理解:数据在组件的自身,但根据数据生成的结构需要组件的使用者来决定。(games数据在Category组件中,但使用数据所遍历出来的结构由App组件决定)
   
      2. 具体编码:
   
         vue          父组件中:                                                                                                                        子组件中:                                                              
         
         vue插槽_第9张图片

​                    vue插槽_第10张图片 子组件数据:vue插槽_第11张图片

​    首先来看到子组件这边 很明显是对games进行了绑定,但并没有对数据的样式做出规定,而父组件这边不仅从子组件中获取了数据,同时还可以对数据的格式做出规定,但要注意的是,在一个子组件下,绑定同一条数据的话,后面规定的样式会覆盖前面的样式

vue插槽_第12张图片vue插槽_第13张图片

​    当然,上面这个问题可以通过与具名插槽连用来解决,但是存在一个问题,只有slot='xxx’能够生效,至少我测试的时候 v-slot:xxx  没有反应

vue插槽_第14张图片vue插槽_第15张图片

你可能感兴趣的:(vue.js,前端,javascript)