vue麵包屑元件的封裝方法
阿新 • • 發佈:2021-09-21
中自己封裝麵包屑元件,供大家參考,具體內容如下
要實現效果
前言
很多電商類產品都需要實現麵包屑導航,用來優化使用者體驗
一.初級麵包屑封裝元件
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> <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 屬性,預設插槽,動態渲染元件
<div class='xtx-bread'> <div class="xtx-bread-item"> <RouterLink to="/">首頁</RouterLink> </div> <i class="iconfont icon-angle-right"></i> <template v-if="parentName"> <div class="xtx-bread-item" v-if="parentName"> <RouterLink v-if="parentPath" to="/category/10000">{{parentName}}</RouterLink> &lwww.cppcns.comt;span v-else>{{parentName}}</span> </div> </template> <i v-if="parentName" class="iconfont icon-angle-right"></i> <div class="xtx-bread-item"> <span> <slot/> </span> </div> </div> //用props接收資料 props: { parentName: { type: String,default: '' },parentPath: { type: String,default: '' } }
3.註冊元件,使用驗證效果
import Bread from './Bread' export default { install (app)http://www.cppcns.com { // Vue2中,引數是Vue建構函式 // Vue3中,引數是根元件的例項物件 // 配置一個全域性元件 app.component(Bread.name,Bread) } }
4.使用元件
<Bread parentPath="/category/1005000" parentName="服飾">飛織系列</Bread> <Bread parentName="服飾">飛織系列</Bread> //parentPath去掉後不能實現跳轉
二、高階封裝 無限極導航
參考element-ui的麵包屑元件:
<el-breadcrumb separator="/"> <el-breadcrumb-item :to="{ path: '/' }">首頁</el-breadcrumb-item> <el-breadcrumb-item><a href="/" rel="external nofollow" >活動管理</a></el-breadcrumb-item> <el-breadcrumb-item>活動列表</el-breadcrumb-item> <el-breadcrumb-item>活動詳情</el-breadcrumb-item> </el-breadcrumb>
1.封裝基礎結構元件 BrendItem.vue
<template> <div class="xtx-bread-item"> <RouterLink v-if="to" :to="to"><slot /></RouterLink> <span v-else><slot /></span> <i class="iconfont icon-angle-right"></i> </div> </template> <script> export default { name: 'XtxBreadItem',props: { to: { type: [String,Object] //to的值即可以是字串,也可以是物件 } } } </script> //使用時 <bread-item to="/xxx/id"></bread-item> <bread-item :to='{path:"/xxx/id"}'></bread-item>
2.封裝 Brend.vue
<template> <div class='xtx-bread'> <slot /> </div> </template> <script> export default { name: 'XtxBread' } </script> <style scoped lang='less'> .xtx-bread { display: flex; padding: 25px 10px; :deep(&-item) { a { www.cppcns.com color: #666; transition: all 0.4s; &:hover { color: @xtxColor; } } } :deep(i) { font-size: 12px; margin-left: 5px; margin-right: 5px; line-height: 22px; } } </style>
3.註冊
import BreadItem from './BreadItem' import Bread from './Bread' export default { install (app) { // Vue2中,引數是Vue建構函式 // Vue3中,引數是根元件的例項物件 // 配置一個全域性元件 app.component(Bread.name,Bread) app.component(BreadItem.name,BreadItem) } }
4.使用
// 麵包屑 <Bread> <BreadItem to="/">首頁</XtxBreadItem> <BreadItem to="/category/1005000">服飾</XtxBreadItem> <BreadItem >飛織系列</XtxBreadItem> </XtxBread>
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。