一般用于组件封装,将使用props传入组件的数据再次调出来或者单纯调用组件中的数据。也可用于为组件某个部分自定义样式以及为某次使用组件自定义样式。
直接拿elementui的el-table举例:
<template>
<el-table v-loading="loading" :data="form" @selection-change="handleSelectionChange" id="outTable" v-show="false">
<el-table-column label="日期" align="center" prop="xmccbgrq" width="180">
<template slot-scope="scope">
<span>{{}}</span>
</template>
</el-table-column>
<el-table-column label="项目状态" align="center" prop="xmzt" :formatter="xmztFormat" />
</el-table>
</template>
<script>
export default {
data(){
return{
isOpen:[
{
name:'关',
data:0
},
{
name:'关',
data:1
}
].
form:[
]
}
}
}
</script>
可以看到子组件中使用了template标签,还能拿到参数。
自己封装方法如下(用的vue3,vue2的话v-slot:default=""改成slot-scope然后3和2语法换一换就行了):
子组件:
<script setup lang="ts">
import HelloWorld from './components/HelloWorld.vue'
</script>
<template>
<div>
<a href="https://vitejs.dev" target="_blank">
<img src="/vite.svg" class="logo" alt="Vite logo" />
</a>
<a href="https://vuejs.org/" target="_blank">
<img src="./assets/vue.svg" class="logo vue" alt="Vue logo" />
</a>
</div>
<HelloWorld msg="我是传递的值">
<template v-slot:default="scope">
<div style="font-size: 50px;color: pink">
{{scope.rows}}
</div>
</template>
</HelloWorld>
</template>
<style scoped>
.logo {
height: 6em;
padding: 1.5em;
will-change: filter;
transition: filter 300ms;
}
.logo:hover {
filter: drop-shadow(0 0 2em #646cffaa);
}
.logo.vue:hover {
filter: drop-shadow(0 0 2em #42b883aa);
}
</style>
父组件:
<script setup lang="ts">
import { ref } from 'vue'
defineProps<{ msg: string }>()
const count = ref(0)
</script>
<template>
<h1>{{ msg }}</h1>
<div class="card">
<button type="button" @click="count++">count is {{ count }}</button>
<p>
Edit
<code>components/HelloWorld.vue</code> to test HMR
<slot :rows="msg"></slot>
</p>
</div>
<p>
Check out
<a href="https://vuejs.org/guide/quick-start.html#local" target="_blank"
>create-vue</a
>, the official Vue + Vite starter
</p>
<p>
Install
<a href="https://github.com/vuejs/language-tools" target="_blank">Volar</a>
in your IDE for a better DX
</p>
<p class="read-the-docs">Click on the Vite and Vue logos to learn more</p>
</template>
<style scoped>
.read-the-docs {
color: #888;
}
</style>
效果:
这里只是基础用法,具体封装传递参数还要根据需求来。