使用slot-scope复制vue中slot内容
Vue 内容 复制 Scope slot 使用
2023-09-27 14:26:44 时间
有时候我们的vue组件需要复制使用者传递的内容。
比如我们工程里面的轮播组件需要使用复制的slot来达到循环滚动的效果
使用者关注轮播内容的静态效果,组件负责让其滚动起来
组件:
<div class="horse-lamp">
<div class="lamp">
<slot name="lamps"></slot>
</div>
<div class="lamp">
<slot name="lamps"></slot>
</div>
</div>
使用者:
<CarouselWidget>
<div slot="lamps">123</div>
</CarouselWidget>
这种实现方式对于初始化的数据是没问题的,但是不支持slot内容的动态绑定,这是因为
- vnode在vue中是唯一的
- 一个vnode只会和一个dom节点绑定
因此当组件使用者在声明节点时,因为只声明了一个div,后台只生成了1个vnode,最终虽然产生了2个div,但是vnode只和后面1个dom绑定了,当vnode修改时也只会修改1个dom
解法:slot-scope
使用slot-scope数据产生的每个slot都会产生一个新的vnode
组件:
<div class="horse-lamp">
<div class="lamp">
<slot name="lamps" :arr="arr"></slot>
</div>
<div class="lamp">
<slot name="lamps" :arr="arr"></slot>
</div>
</div>
使用者:
<CarouselWidget :arr="info.column">
<template scope="slotProps" slot="lamps">
<component v-for="(item, index) in slotProps.arr"
:key="info.id"
:is="templates[item.type]"
:item="item"
></component>
</template>
</CarouselWidget>
这种情况下component内容有改动,那么组件内容2个slot都会同步更新
项目使用的vue版本是2.4.2,更高级的vue的slot-scope语法可能不太一样
相关文章
- 【Vue】路由组件中失去焦点和获得焦点的两个事件
- tab切换vue中created方法执行两次
- Node+TS+Koa+vue 商城全栈(七)创建模板文件
- Vue - Modal 对话框 content 内容解析富文本 (Ant Design Vue)
- Vue - 实现复制内容到剪贴板(一键复制)
- JavaScript - 批量替换对象数组中的属性名(快速将二维数组对象中的键名进行大量替换)传入原来的属性名和要修改的属性名即可,适用于 js vue nuxt uniapp等项目,详细示例代码教程
- 「Vue.js」Vue-Router + Webpack 路由懒加载实现
- 使用slot-scope复制vue中slot内容
- jsp页面用html引入vue.js注意问题
- Vue--嵌套路由-多层级关系-to="/account/login"---路由子组件children: [],--保留父组件的内容
- VUE-007-通过路由 router.push 传递 query 参数(路由 name 识别,请求链接显示参数传递)
- VUE控制按钮状态
- 【毕业设计/课程设计】基于Vue的在线聊天系统
- vue-worker
- 使用vue-cli3搭建一个项目!!!
- vue中watch的用法总结以及报错处理Error in callback for watcher "checkList"