美文网首页
VUE-学习

VUE-学习

作者: 16325 | 来源:发表于2020-03-13 10:24 被阅读0次

记录一些容易忘记的知识点

v-slot

在vue v2.6.0中,新引入了v-slot指令,他取代了slot和slot-scope这两个目前已经被废弃但是未被移除的特性。

  • 父页面在组件标签内插入任意内容,子组件内插糟slot控制摆放位置
    (匿名插槽,具名插槽)

插槽分类

插槽一共就三大类

  1. 匿名插槽(也叫默认插槽): 没有命名,有且只有一个
  2. 具名插槽: 相对匿名插槽组件slot标签带name命名的
  3. 作用域插槽: 子组件内数据可以被父页面拿到(解决了数据只能从父页面传递给子组件)

匿名插槽(也叫默认插槽default)

用法:我的理解,匿名插糟只需要一个

父页面:

 <todo-list> 
        <template v-slot:default>
              任意内容
             <p>我是匿名插槽 </p>
        </template>
</todo-list>    
//v-slot:default写上感觉和具名写法比较统一,容易理解,也可以不用写

子组件 todoList.vue

<slot>我是默认值</slot>
##显示##
// 任意内容
// 我是匿名插槽

具名插槽(name)

用法:我的理解,和匿名插槽比较,就是必须起名todo对应,可以有多个具名插槽.(没了~)
父页面

 <todo-list> 
        <template v-slot:todo>
              任意内容
             <p>我是匿名插槽 </p>
        </template>
</todo-list>  
// todo
data() {
     return {
       dynamicSlotName:"todo"  
     }

 },

子组件

<slot name="todo">我是默认值</slot>
##显示##
// 任意内容
// 我是匿名插槽

动态命名

v-slot:{dynamicSlotName}//替换标签上 v-slot:todo

具名插槽缩写(匿名插槽用法)

  • #todo 替换标签上 v-slot:todo
  • #default 替换标签上 v-slot:todo
    父级模板里的所有内容都是在父级作用域中编译的;子模板里的所有内容都是在子作用域中编译的。

作用域插槽

1.重点是slotProps接取子组件里:user="user" :test="test"类似属性的数据
父页面

<todo-list>
  <template v-slot:todo="slotProps" >
      {{slotProps.user.firstName}}
  </template> 
</todo-list> 
//slotProps 可以随意命名
//slotProps 接取的是子组件标签slot上属性数据的集合所有v-bind:user="user"
子组件

 <slot name="todo" :user="user" :test="test">
        {{ user.lastName }}
  </slot> 
data() {
        return {
            user:{
                lastName:"Zhang",
                firstName:"yue"
            },
            test:[1,2,3,4]
        }
    },
// {{ user.lastName }}是默认数据   v-slot:todo 当父页面没有(="slotProps")
// 时显示 Zhang


## 显示 ##
// yue

解构插槽Prop

父页面 (子组件不变 显示一样)

// 相当于
function (slotProps) {
  // 插槽内容
}
(slotProps)=>参数可以用slot标签上现有的值({user,test})替换
<todo-list>
  <template v-slot:todo="{user,test}
" >
      {{user.firstName}}
  </template> 
</todo-list> 
## 显示 ##
## // yue
参数值替换名字(可以后看)

<todo-list>
  <template  v-slot:todo="{user:person,test}
" >
      {{person.firstName}}
  </template> 
</todo-list> 

// v-slot:[dynamicSlotName]="{user:person,test}
## 显示 ##
## // yue

相关文章

网友评论

      本文标题:VUE-学习

      本文链接:https://www.haomeiwen.com/subject/gjmfshtx.html