在 2.6.0 中,我们为具名插槽和作用域插槽引入了一个新的统一的语法 (即 v-slot 指令)。它取代了 slot 和 slot-scope 这两个目前已被废弃但未被移除且仍在文档中的特性。新语法的由来可查阅 RFC。
引vue官方文档
之前做项目时,对插槽理解太少了,这两天学习时,才发现插槽更新用v-slot了,自己做了些简单总结,与大家分享一下~
插槽
我的理解就是父页面在组件标签内插入任意内容,子组件内插糟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:todo 做操作:
动态命名
v-slot:{dynamicSlotName}//替换标签上 v-slot:todo
具名插槽缩写(匿名插槽用法)(可以后看)
#todo 替换标签上 v-slot:todo
匿名如果想用必须加上default
#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
独占默认插槽缩写(可以后看)
感觉没什么机会用,限制条件太多
总结
在用上v-slot之后 只需要考虑好
1.是否需要命名(匿名插槽,具名插槽)
2.父页面是否需要取存在子页面的数据(作用域插槽)
todo-list实例
可以试一下,便于理解~
父页面
<template> <div> 新插槽 v-slot 代替具名插槽 作用于插槽 <todo-list > <template #todo="{todos:list}"> <div @click = type(todos.id)> {{list.text}} </div> </template> </todo-list> </div > </template> <script> import todoList from "@/components/component/slotTodoChildren"; export default { name:"vSlot", components:{ todoList }, data() { return { } }, methods: { type(data){ console.log(data) } }, } </script>
子组件
<template> <ul class="slotTodoChildren"> <li class="lis" v-for="todo in todoList" v-bind:key="todo.id" > <!-- 我们为每个 todo 准备了一个插槽, 将 `todo(todoList里的)` 对象作为一个插槽的 prop 传入。 --> <slot name="todo" :todos="todo"> <!-- 后备内容 --> {{ todo.text }} </slot> </li> </ul> </template> <script> export default { name:"slotChildren", data() { return { todoList:[ { id:1, text:"扫地" }, { id:2, text:"做饭" }, { id:3, text:"擦桌子" } ] } }, created(){ console.log(this.filteredTodos) } } </script> <style scoped> .slotTodoChildren .lis{ display: block; background: #434534; line-height:40px; margin-top: 10px; color: #fff; font-size: 24px; height: 40px; } </style>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]