✨(component): [tabitem] title 支持渲染函数
This commit is contained in:
		
							parent
							
								
									8820748d8c
								
							
						
					
					
						commit
						f30012c852
					
				| @ -8,7 +8,6 @@ export default { | |||||||
| import "./index.less"; | import "./index.less"; | ||||||
| import { LayIcon } from "@layui/icons-vue"; | import { LayIcon } from "@layui/icons-vue"; | ||||||
| import tabItem from "../tabItem/index.vue"; | import tabItem from "../tabItem/index.vue"; | ||||||
| import RenderTitle from "./renderTitle.vue"; |  | ||||||
| import RenderFunction from "../_components/renderFunction"; | import RenderFunction from "../_components/renderFunction"; | ||||||
| import { | import { | ||||||
|   Component, |   Component, | ||||||
| @ -26,6 +25,7 @@ import { | |||||||
|   reactive, |   reactive, | ||||||
|   h, |   h, | ||||||
|   createTextVNode, |   createTextVNode, | ||||||
|  | isVNode, | ||||||
| } from "vue"; | } from "vue"; | ||||||
| import { useResizeObserver } from "@vueuse/core"; | import { useResizeObserver } from "@vueuse/core"; | ||||||
| import { TabData, TabInjectKey } from "./interface"; | import { TabData, TabInjectKey } from "./interface"; | ||||||
| @ -268,9 +268,18 @@ const update = () => { | |||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| const renderTabChild = (child: TabData) => { | const renderTabChild = (child: TabData) => { | ||||||
|   return child.slots?.title | 
 | ||||||
|     ? () => h("span", child.slots?.title && child.slots.title()) |   if (child.slots?.title){ | ||||||
|     : () => createTextVNode(child.title); |     return () => h("span", child.slots?.title && child.slots.title()) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   if (typeof child.title === "function"){ | ||||||
|  |     // @ts-ignore | ||||||
|  |     return () => child.title(); | ||||||
|  |      | ||||||
|  |   } else if (typeof child.title === "string"){ | ||||||
|  |     return () => createTextVNode(child.title as string); | ||||||
|  |   } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| useResizeObserver(navRef, update); | useResizeObserver(navRef, update); | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ export const TabInjectKey = Symbol("layuiTab"); | |||||||
| 
 | 
 | ||||||
| export interface TabData { | export interface TabData { | ||||||
|   id: string; |   id: string; | ||||||
|   title?: string; |   title?: string | Function; | ||||||
|   closable?: string | boolean; |   closable?: string | boolean; | ||||||
|   slots: Slots; |   slots: Slots; | ||||||
| } | } | ||||||
|  | |||||||
| @ -20,7 +20,7 @@ import { TabInjectKey, TabsContext } from "../tab/interface"; | |||||||
| 
 | 
 | ||||||
| export interface LayTabItemProps { | export interface LayTabItemProps { | ||||||
|   id: string; |   id: string; | ||||||
|   title: string; |   title?: string | Function; | ||||||
|   closable?: boolean | string; |   closable?: boolean | string; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -43,40 +43,56 @@ export default { | |||||||
| 
 | 
 | ||||||
| <template> | <template> | ||||||
|   <lay-tab v-model="current11" :allow-close="true"> |   <lay-tab v-model="current11" :allow-close="true"> | ||||||
|     <lay-tab-item title="选项一" id="1"> |     <lay-tab-item id="1"> | ||||||
|       <template #title> |       <template #title> | ||||||
|         <lay-icon type="layui-icon-console"></lay-icon> |         <lay-icon type="layui-icon-console"></lay-icon> | ||||||
|         <span style="margin-left:10px">选项一</span> |         <span style="margin-left:10px">选项一</span> | ||||||
|       </template> |       </template> | ||||||
|       <div style="padding:20px">选项一</div> |       <div style="padding:20px">选项一</div> | ||||||
|     </lay-tab-item> |     </lay-tab-item> | ||||||
|     <lay-tab-item title="选项一" id="2"> |     <lay-tab-item id="2"> | ||||||
|       <template #title> |       <template #title> | ||||||
|         <lay-icon type="layui-icon-user"></lay-icon> |         <lay-icon type="layui-icon-user"></lay-icon> | ||||||
|         <span style="margin-left:10px">选项一</span> |         <span style="margin-left:10px">选项二</span> | ||||||
|       </template> |       </template> | ||||||
|       <div style="padding:20px">选项二</div> |       <div style="padding:20px">选项二</div> | ||||||
|     </lay-tab-item> |     </lay-tab-item> | ||||||
|     <lay-tab-item title="选项一" id="3"> |     <lay-tab-item id="3"> | ||||||
|       <template #title> |       <template #title> | ||||||
|         <lay-icon type="layui-icon-set"></lay-icon> |         <lay-icon type="layui-icon-set"></lay-icon> | ||||||
|         <span style="margin-left:10px">选项一</span> |         <span style="margin-left:10px">选项三</span> | ||||||
|       </template> |       </template> | ||||||
|       <div style="padding:20px">选项三</div> |       <div style="padding:20px">选项三</div> | ||||||
|     </lay-tab-item> |     </lay-tab-item> | ||||||
|  |     <lay-tab-item id="4" :title="renderTitleFunc"> | ||||||
|  |       <div style="padding:20px">选项四</div> | ||||||
|  |     </lay-tab-item> | ||||||
|   </lay-tab> |   </lay-tab> | ||||||
| </template> | </template> | ||||||
| 
 | 
 | ||||||
| <script> | <script> | ||||||
| import { ref } from 'vue' | import { ref,h , resolveComponent} from 'vue' | ||||||
| 
 | 
 | ||||||
| export default { | export default { | ||||||
|   setup() { |   setup() { | ||||||
|  |     const LayIcon = resolveComponent("LayIcon"); | ||||||
| 
 | 
 | ||||||
|     const current11 = ref("1") |     const current11 = ref("1") | ||||||
|  |     const renderTitleFunc = () => [ | ||||||
|  |       h(LayIcon,  | ||||||
|  |       { | ||||||
|  |         type: "layui-icon-component", | ||||||
|  |       }), | ||||||
|  |       h("span",  | ||||||
|  |       { | ||||||
|  |         style: "margin-left: 10px; color: red", | ||||||
|  |       }, | ||||||
|  |       "选项四") | ||||||
|  |     ] | ||||||
| 
 | 
 | ||||||
|     return { |     return { | ||||||
|       current11 |       current11, | ||||||
|  |       renderTitleFunc | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user