Vue中作用域插槽的使用
Vue 作用域 插槽 使用
2023-09-11 14:19:18 时间
Vue中的作用域插槽可以让父组件使用插槽时的内容能够访问子组件中的数据,数据在组件自身,但是根据数据生成的结构需要组件的使用者来决定。
这里可以先看一个例子,以便更好的理解作用域插槽的作用,在子组件中使用v-for创建一个列表循环,然后在父组件中通过子组件标签category调用,如下例。
category子组件:
<template>
<div class="category">
<ul>
<li v-for="(g,index) in games" :key="index">{{g}}</li>
</ul>
</div>
</template>
<script>
export default {
name:'Category',
props:['title'],
data() {
return {
games:['红色警戒','穿越火线','劲舞团','超级玛丽'],
}
},
}
</script>
App父组件:
<template>
<div class="container">
<Category title="游戏"></Category>
<Category title="游戏"></Category>
<Category title="游戏"></Category>
</div>
</template>
<script>
import Category from './components/Category'
export default {
name:'App',
components:{ Category },
}
</script>
结果:
调用了三次category组件,因为调用的是同一个子组件,所以显示的内容完全一样。
那如何在每次调用时能有各自的渲染效果?这就是作用域插槽的用武之地。
作用域插槽就是父组件在调用子组件的时候给子组件传了一个插槽,这个插槽为作用域插槽,该插槽必须放在template标签里面,同时声明从子组件接收的数据放在一个自定义属性内,并定义该数据的渲染方式,实现从子组件到父组件的数据传递。通过下列展示作用域插槽的使用方式:
category子组件:
<template>
<div class="category">
<slot :games="games" msg="hello">我是默认的一些内容</slot>//通过:game传递
</div>
</template>
<script>
export default {
name:'Category',
props:['title'],
data() {
return {
games:['红色警戒','穿越火线','劲舞团','超级玛丽'],
}
},
}
</script>
App父组件(scope="{对象名(可解构赋值)}"声明):
<template>
<div class="container">
<Category title="游戏">
<template scope="atguigu">
<ul>
<li v-for="(g,index) in atguigu.games" :key="index">{{g}}</li>
</ul>
</template>
</Category>
<Category title="游戏">
<template scope="{games}">
<ol>
<li style="color:red" v-for="(g,index) in games" :key="index">{{g}}</li>
</ol>
</template>
</Category>
<Category title="游戏">
<template slot-scope="{games}">
<h4 v-for="(g,index) in games" :key="index">{{g}}</h4>
</template>
</Category>
</div>
</template>
<script>
import Category from './components/Category'
export default {
name:'App',
components:{ Category },
}
</script>
通过上例可知,使用作用域插槽后,三次调用子组件可以定义不同的渲染方式。这里我们使用的数据是一样的,但是根据数据生成的结构是由使用的父组件决定的。数据只通过插槽传递即可,达到了更灵活的效果。games数据在category组件中,但数据遍历出来的结构由App决定。
相关文章
- Vue笔记:vue项目引入bootstrap、elementUI、echarts
- Vue笔记:安装配置node.js及使用vue-cli创建项目
- VUE - vue.runtime.esm.js?6e6d:619 [Vue warn]: Do not use built-in or reserved HTML elements as component i
- vue版本冲突解决办法
- Vue命名规范
- Vue splice方法使用
- [Vue @Component] Simplify Vue Components with vue-class-component
- vue.js3:图片镜像(翻转)并保存(vue@3.2.37)
- Vue.js3: 页面打开前实现图片全部预加载(vue@3.2.33)
- [Vue @Component] Define Props on a Vue Class with vue-property-decorator
- [Vue @Component] Simplify Vue Components with vue-class-component
- [Vue] Get up and running with vue-router
- django-vue-admin前端设置后台接口地址为127.0.0.1产生跨域问题解决办法
- Vue入门教程:node安装vue命令行工具及启动项目
- 【视频】vue组件之slot插槽
- 架构设计:Vue+nginx+jwt+zuul+eureka+ribbon+hystrix+rabbitmq+mysql集群+redis集群+elsticsearch集群
- standalone vue initialization process - Vue应用的初始化过程
- Vue 2.5 发布了:15篇前端热文回看
- Vue学习之--------插槽【默认插槽、具名插槽、作用域插槽】(2022/8/30)
- 在vue中使用echarts
- 前端MVC Vue2学习总结(二)——Vue的实例、生命周期与Vue脚手架(vue-cli)
- Vue中vue-i18n结合element-ui实现国际化
- Vue、Vuejs从入门到精通 | vue-router详解
- Vue(八)vue 脚手架、脚手架创建项目示例
- Vue 开发必须知道的 36 个技巧【近1W字】
- vue实现点击选择多选标签(整理)
- vue项目中使用CDN引入
- Visual Studio Code 安装 Vue插件需求
- Vue教程
- vue项目打包后部署到服务器(超详细步骤)