File tree Expand file tree Collapse file tree 3 files changed +52
-7
lines changed Expand file tree Collapse file tree 3 files changed +52
-7
lines changed Original file line number Diff line number Diff line change @@ -19,6 +19,7 @@ export default defineComponent({
1919 } ,
2020 setup ( props , { slots } ) {
2121 const tabs = inject < Tabs > ( 'tabs' ) ;
22+ tabs . state . slots . push ( slots . dTabTitle ) ;
2223 tabs . state . data . push ( props ) ;
2324 return ( ) => {
2425 const { id } = props ;
Original file line number Diff line number Diff line change 66 PropType ,
77 provide ,
88 reactive ,
9- ref
9+ ref ,
10+ Slot
1011} from 'vue' ;
1112import './tabs.scss' ;
1213
@@ -19,6 +20,7 @@ interface TabsState {
1920 data ?: any [ ]
2021 showContent : boolean
2122 active : any
23+ slots : Slot [ ]
2224}
2325export default defineComponent ( {
2426 name : 'DTabs' ,
@@ -65,7 +67,8 @@ export default defineComponent({
6567 const state : TabsState = reactive ( {
6668 data : [ ] ,
6769 active : props . modelValue ,
68- showContent : props . showContent
70+ showContent : props . showContent ,
71+ slots : [ ]
6972 } ) ;
7073 provide < Tabs > ( 'tabs' , {
7174 state
@@ -157,7 +160,7 @@ export default defineComponent({
157160 class = { `devui-nav devui-nav-${ ulClass . join ( ' ' ) } ` }
158161 id = 'devuiTabs11'
159162 >
160- { state . data . map ( ( item ) => {
163+ { state . data . map ( ( item , i ) => {
161164 return (
162165 < li
163166 role = 'presentation'
@@ -178,7 +181,11 @@ export default defineComponent({
178181 data-toggle = { item . id }
179182 aria-expanded = { props . modelValue === ( item . id || item . tabId ) }
180183 >
181- < span > { item . title } </ span >
184+ { state . slots [ i ] ? (
185+ state . slots [ i ] ( )
186+ ) : (
187+ < span > { item . title } </ span >
188+ ) }
182189 </ a >
183190 </ li >
184191 ) ;
Original file line number Diff line number Diff line change @@ -262,17 +262,54 @@ export default defineComponent({
262262
263263:::
264264
265+ ### 自定义模板
266+
267+ ::: demo
268+
269+ ``` vue
270+ <template>
271+ <d-tabs type="tabs" v-model="id">
272+ <d-tab id="tab1" title="Tab1" tabId="tab1">
273+ <template v-slot:dTabTitle> 就是这样 </template>
274+ <p>Tab1 Content</p>
275+ </d-tab>
276+ <d-tab id="tab2" title="Tab2" tabId="tab2">
277+ <template v-slot:dTabTitle> 就是这样1 </template>
278+ <p>Tab2 Content</p>
279+ </d-tab>
280+ <d-tab id="tab3" title="Tab3" tabId="tab3">
281+ <template v-slot:dTabTitle> 就是这样2 </template>
282+ <p>Tab3 Content</p>
283+ </d-tab>
284+ </d-tabs>
285+ </template>
286+ <script>
287+ import { defineComponent, ref } from 'vue';
288+
289+ export default defineComponent({
290+ setup() {
291+ const id = ref('tab3');
292+ return {
293+ id
294+ };
295+ }
296+ });
297+ </script>
298+ ```
299+
300+ :::
301+
265302### API
266303
267- | 参数 | 类型 | 默认 | 说明 | |
268- | :----------: | :---------------------------------------------: | :----: | :---------------------------------------------------------------------------------------------------: | --------------- |
304+ | 参数 | 类型 | 默认 | 说明 | |
305+ | :----------: | :---------------------------------------------: | :----: | :---------------------------------------------------------------------------------------------------: | --- |
269306| type | ` tabs \| pills \| options \| wrapped \| slider ` | 'tabs' | 可选,选项卡组的类型 |
270307| showContent | ` boolean ` | true | 可选,是否显示选项卡对应的内容 |
271308| v-model | ` string ` | -- | 可选,当前激活的选项卡,值为选项卡的 id |
272309| customWidth | ` string ` | -- | 可选,自定义选项卡的宽 |
273310| vertical | ` boolean ` | false | 可选,是否垂直显 |
274311| beforeChange | ` function\|Promise ` | -- | tab 切换前的回调函数,返回 boolean 类型,返回 false 可以阻止 tab 的切换 |
275- | reactivable | ` boolean ` | false | 可选,点击当前处于激活态的 tab 时是否触发` activeTabChange ` 事件,` true ` 为允许触发,` false ` 为不允许触发 | [ 拦截 tab 切换 ] |
312+ | reactivable | ` boolean ` | false | 可选,点击当前处于激活态的 tab 时是否触发` activeTabChange ` 事件,` true ` 为允许触发,` false ` 为不允许触发 |
276313
277314### d-tabs 事件
278315
You can’t perform that action at this time.
0 commit comments