今天我们来封装一个初级版面包屑组件
(1)准备静态bread.vue组件
<template>
<div class='xtx-bread'>
<div class="xtx-bread-item">
<RouterLink to="/">首页</RouterLink>
</div>
<i class="iconfont icon-angle-right"></i>
<div class="xtx-bread-item">
<RouterLink to="/category/10000">电器</RouterLink>
</div>
<i class="iconfont icon-angle-right"></i>
<div class="xtx-bread-item">
<span>空调</span>
</div>
</div>
</template>
<script>
export default {
name: 'XtxBread'
}
</script>
<style scoped lang='less'>
.xtx-bread{
display: flex;
padding: 25px 10px;
&-item {
a {
color: #666;
transition: all .4s;
&:hover {
color: @xtxColor;
}
}
}
i {
font-size: 12px;
margin-left: 5px;
margin-right: 5px;
line-height: 22px;
}
}
</style>
(2)定义props,暴露parentPath,parentName属性,默认插槽,动态渲染组件
<template>
<div class='xtx-bread'>
<div class="xtx-bread-item">
<RouterLink to="/">首页</RouterLink>
</div>
<i class="iconfont icon-angle-right"></i>
+ <div class="xtx-bread-item" v-if="parentName">
+ <RouterLink v-if="parentPath" :to="parentPath">{{parentName}}</RouterLink>
+ <span v-else>{{parentName}}</span>
+ </div>
+ <i v-if="parentName" class="iconfont icon-angle-right"></i>
<div class="xtx-bread-item">
+ <span><slot /></span>
</div>
</div>
</template>
<script>
export default {
name: 'XtxBread',
+ props: {
+ parentName: {
+ type: String,
+ default: ''
+ },
+ parentPath: {
+ type: String,
+ default: ''
+ }
+ }
}
</script>
使用组件:
<XtxBread parentPath="/category/1005000" parentName="电器">空调</XtxBread>
效果
总结:这样封装的面包屑组件具有局限性,仅仅支持二级导航,不够灵活,
我将在以后封装面包屑组件的高级封装方式,尽请期待!!!