11import { cloneVNode , defineComponent , PropType , ExtractPropTypes } from 'vue' ;
22import PropTypes from '../_util/vue-types' ;
3- import { filterEmpty , getPropsSlot } from '../_util/props-util' ;
3+ import { flattenChildren , getPropsSlot } from '../_util/props-util' ;
44import warning from '../_util/warning' ;
55import BreadcrumbItem from './BreadcrumbItem' ;
66import Menu from '../menu' ;
@@ -17,7 +17,7 @@ const breadcrumbProps = {
1717 prefixCls : PropTypes . string ,
1818 routes : { type : Array as PropType < Route [ ] > } ,
1919 params : PropTypes . any ,
20- separator : PropTypes . VNodeChild ,
20+ separator : PropTypes . any ,
2121 itemRender : {
2222 type : Function as PropType <
2323 ( opt : { route : Route ; params : unknown ; routes : Route [ ] ; paths : string [ ] } ) => VueNode
@@ -53,6 +53,7 @@ function defaultItemRender(opt: {
5353export default defineComponent ( {
5454 name : 'ABreadcrumb' ,
5555 props : breadcrumbProps ,
56+ slots : [ 'separator' , 'itemRender' ] ,
5657 setup ( props , { slots } ) {
5758 const { prefixCls, direction } = useConfigInject ( 'breadcrumb' , props ) ;
5859
@@ -122,10 +123,10 @@ export default defineComponent({
122123
123124 const { routes, params = { } } = props ;
124125
125- const children = filterEmpty ( getPropsSlot ( slots , props ) ) ;
126- const separator = getPropsSlot ( slots , props , 'separator' ) ;
126+ const children = flattenChildren ( getPropsSlot ( slots , props ) ) ;
127+ const separator = getPropsSlot ( slots , props , 'separator' ) ?? '/' ;
127128
128- const itemRender = getPropsSlot ( slots , props , ' itemRender' ) || defaultItemRender ;
129+ const itemRender = props . itemRender || slots . itemRender || defaultItemRender ;
129130 if ( routes && routes . length > 0 ) {
130131 // generated by route
131132 crumbs = genForRoutes ( {
@@ -153,5 +154,4 @@ export default defineComponent({
153154 return < div class = { breadcrumbClassName } > { crumbs } </ div > ;
154155 } ;
155156 } ,
156- methods : { } ,
157157} ) ;
0 commit comments