Vue模擬el-table演示插槽用法的示例詳解
vue的slot分為三種::匿名插槽,具名插槽, 作用域插槽,主要作用:讓父組件可以向子組件指定位置插入 html 結構,也是一種組件間通信的方式,適用于父組件=>子組件
1、匿名插槽
匿名組件相當于一個占位符,將父組件的數據傳入子組件的slot標簽內
父組件:
<template> <ChildSlot>父組件調用</ChildSlot> </template> <script> import ChildSlot from "@/components/ChildSlot"; export default { components:{ ChildSlot } } </script>
子組件:
<template> <h1>我是子組件</h1> <slot></slot> </template> <script> export default { name: "ChildSlot" } </script>
運行結果如下:
此時父組件中的“父組件調用”這段內容就傳遞到了子組件,并填入了slot挖的坑當中
2、具名插槽
具名插槽相當于給插槽添加了一個名字(給插槽加入name屬性就是具名插槽)
父組件:
<template> <child-slot> <template v-slot:username>我是父組件傳遞的用戶姓名</template> </child-slot> <child-slot> <template v-slot:age>我是父組件傳遞的年齡</template> </child-slot> </template> <script> import ChildSlot from "@/components/ChildSlot"; export default { components:{ ChildSlot } } </script>
子組件:
<template> <h1>我是子組件</h1> <slot name="username"></slot> <slot name="age"></slot> </template> <script> export default { name: "ChildSlot" } </script>
運行結果如下:
此時父組件中的根據slot的name,將內容填入了slot挖的坑當中,一個蘿卜一個坑
3、作用域插槽
與前兩者的不同 slot自定義:name="值" 子組件可向父組件傳遞信息
父組件:
<template> <child-slot> <template v-slot="{username}">我是子組件傳遞的用戶姓名:{{username}}</template> </child-slot> </template> <script> import ChildSlot from "@/components/ChildSlot"; export default { components:{ ChildSlot } } </script>
子組件:
<template> <h1>我是子組件</h1> <slot :username="username"></slot> </template> <script> export default { name: "ChildSlot", data(){ return{ username:'java', } } } </script>
運行結果如下:
通過作用域插槽,我們可以將子組件中的值傳入到父組件,在父組件進行數據處理后,填坑到子組件
4、模擬寫一個el-table
先看一個el-table的例子,當需要對一行中的某一個單元格的內容進行處理的時候,需要用到slot插槽,例如下面的姓名name的處理
<template> <el-table :data="tableData" style="width: 100%"> <el-table-column label="姓名" width="180"> <template slot-scope="scope"> <el-popover trigger="hover" placement="top"> <p>姓名: {{ scope.row.name }}</p> <p>住址: {{ scope.row.address }}</p> <div slot="reference" class="name-wrapper"> <el-tag size="medium">{{ scope.row.name }}</el-tag> </div> </el-popover> </template> </el-table-column> <el-table-column prop="address" label="地址"> </el-table-column> </el-table> </template>
參照el-table,實現我們自己的table組件,講解下為什么需要用插槽,用了哪些插槽
4.1為了傳遞table,首先通過匿名插槽,寫一個的組件,目的就是模擬下面這三行內容
? <el-table
? :data="tableData"
? style="width: 100%">
<template> <div> <slot></slot> </div> </template> <script> export default { name: "MyTable" } </script>
4.2實現el-table-column,通過作用域插槽,寫我們自己的el-table-column
<template> <div> <div> <!--通過傳遞label標簽,展示表頭--> <span v-if="label">{{ label }}</span> </div> <!--獲取主頁面的data值:$parent.$parent.$data.tableList--> <div v-for="(user,index) in $parent.$parent.$data.tableList" :key="index"> <!--當傳遞prop屬性的時候,就取user用戶的數據--> <div v-if="prop">{{user[prop]}}</div> <!--當不傳遞prop屬性的時候,將用戶的數據通過row屬性,傳遞到父組件當中,也就是app.vue--> <slot v-else :row="user"></slot> </div> </div> </template> <script> export default { name: "MyTableColumn", props: { prop: {type: String}, label: {type: String} } } </script>
4.3調用my-table,my-table-column
我們通過my-table標簽,將內容my-table和my-table-column放置到my-table的匿名插槽中,并通過子組件的props屬性,接收prop和label。如同elementui一樣,如果prop為空,子附件將父組件的user通過作用域插槽傳遞到父組件,并在父組件進行處理
<template> <div> <my-table :data="tableList" style="display: flex; flex-direction: row;"> <my-table-column prop="name" label="姓名"></my-table-column> <my-table-column prop="sex" label="性別"></my-table-column> <my-table-column label="地址"> <template v-slot="scope"> <span style="background-color: deepskyblue">{{scope.row.address}}</span> </template> </my-table-column> </my-table> </div> </template> <script> import MyTable from "@/components/MyTable"; import MyTableColumn from "@/components/MyTableColumn"; export default { name: 'App', components:{ MyTableColumn, MyTable }, data(){ return{ tableList:[ { name: 'java大師1', sex: '男', address: '西藏1' }, { name: 'java大師2', sex: '男', address: '西藏2' }, { name: 'java大師3', sex: '男', address: '西藏3' }, { name: 'java大師4', sex: '男', address: '西藏4' } ] } } } </script>
展示結果如下:
以上就是Vue模擬el-table演示插槽用法的示例詳解的詳細內容,更多關于Vue el-table插槽的資料請關注腳本之家其它相關文章!
相關文章
vue實現動態(tài)表格提交參數動態(tài)生成控件的操作
這篇文章主要介紹了vue實現動態(tài)表格提交參數動態(tài)生成控件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11Vue3使用echarts tree高度自適應支持滾動查看功能
這篇文章主要介紹了Vue3使用echarts tree高度自適應支持滾動查看功能,文章同通過代碼示例介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下2024-06-06