如何在vue中实现带有完整链接的面包屑,js

pgx2nnw8  于 2023-05-01  发布在  Vue.js
关注(0)|答案(3)|浏览(178)

我已经在vue中实现了面包屑。使用npm的js应用程序。但我希望我的面包屑显示一个链接到上一页,与链接到当前页(ID包括)旁边。就像这样:
主页〉详细信息页面(可点击链接)
我试着从这个链接[https://www.npmjs.com/package/vue-2-breadcrumbs]](https://www.npmjs.com/package/vue-2-breadcrumbs])的例子
这是我的索引。js文件

import Vue from 'vue'
import Details from '@/components/Details'
import Router from 'vue-router'
import HomePage from '@/components/HomePage'
import VueBreadcrumbs from 'vue-2-breadcrumbs'

Vue.use(Router)
Vue.use(VueBreadcrumbs,{
template:
    '            <ul class="breadcrumb">\n' +
    '                <li v-for="(crumb, key) in $breadcrumbs" v-if="crumb.meta.breadcrumb" :key="key" class="breadcrumb-item active" aria-current="page">\n' +
    '                    <router-link :to="{ path: getPath(crumb) }">{{ getBreadcrumb(crumb.meta.breadcrumb) }}</router-link>' +
    '                </li>\n' +
    '            </ul>\n' 
})

export default new Router({
    routes: [
        {
            path: '/',
            component: HomePage,
            name: 'HomePage',
            meta: {
                breadcrumb: 'Home Page',
            },

        },
        {
            path: '/Details/:id',
            component: Details,
            meta:{
                breadcrumb: function () {
                    const {name} = this.$route;
                    return `${name}`;
                  }
            },
            name: 'Details',
            props: true
        }

    ]
})

它全部编译,并呈现(但只有一个链接,即到当前页面的链接)。现在我想添加历史链接到我的breadcrumb(主页链接)。我该怎么做?

8tntrjer

8tntrjer1#

好吧,所以我从你的评论中得到了一些灵感,这就是我如何修复它的:
所以我添加了一个额外的<li>来保存“主页”,第二个<li>用于循环当前页面。..我还将所有内容都 Package 在一个根中-因此不会发生关于双根元素的错误。

Vue.use(VueBreadcrumbs,{
template:

'        <div v-if="$breadcrumbs.length" aria-label="breadcrumb">\n' +
'            <ol class="breadcrumb">\n' +
' <li class="breadcrumb-item"><a href="/">Home</a></li>' +
'                <li v-for="(crumb, key) in $breadcrumbs" v-if="crumb.meta.breadcrumb" :key="key" class="breadcrumb-item active" aria-current="page">\n' +
'                    <router-link :to="{ path: getPath(crumb) }">{{ getBreadcrumb(crumb.meta.breadcrumb) }}</router-link>' +
'                </li>\n' +
'            </ol>\n' +
'        </div>'
})

谢谢大家的帮助!

bksxznpy

bksxznpy2#

添加另一个路由器链接到您的模板:

<div id="root">
<router-link :to="/">Home</router-link>
<ul class="breadcrumb">
  <li v-for="(crumb, key) in $breadcrumbs" v-if="crumb.meta.breadcrumb" :key="key" class="breadcrumb-item active" aria-current="page">
    <router-link :to="{ path: getPath(crumb) }">{{ getBreadcrumb(crumb.meta.breadcrumb) }}</router-link>
  </li>
</ul>
</div>

**编辑:**模板声明方式如下:

Vue.use(VueBreadcrumbs, {
  template: ```
    <div id="root">
    <router-link :to="/">Home</router-link>
    <ul class="breadcrumb">
      <li v-for="(crumb, key) in $breadcrumbs" v-if="crumb.meta.breadcrumb" :key="key" class="breadcrumb-item active" aria-current="page">
        <router-link :to="{ path: getPath(crumb) }">{{ getBreadcrumb(crumb.meta.breadcrumb) }}</router-link>
      </li>
    </ul>
    </div>

})

wpx232ag

wpx232ag3#

您可以创建自己的面包屑
在文件索引中。来自路由器的ts'

export let activedRoutes: RouteRecord[] = []

router.beforeEach((to, from, next) => {
    activedRoutes = [];
    to.matched.forEach((record) => { activedRoutes.push(record) })
    next();
});

在路由定义中

{
        path: 'my-path-route',
        name: 'MyNameRoute',
        component: () => import('./MyComponent/MyComponent.component.vue'),
        meta: {
            title: 'Title',
            icon: 'my-icon',
            breadcrumb: { label: 'Label of bradcrumb', routeName: 'MyNameRoute'}
        },
}

创建BreadbrumbComponent

import Vue from 'vue';
import Component from 'vue-class-component';
import { Watch } from 'vue-property-decorator';
import { activedRoutes } from '@/router';

@Component({})
export default class BreadcrumbsComponent extends Vue {

    breadcrumbs = []

    @Watch('$route')
    changeRoute() {
        this.breadcrumbs = activedRoutes.map(e => e.meta?.breadcrumb).filter(e => e);
    }

    created() {
        this.changeRoute()
    }

}

在html中BreadcrumbComponent

<template>
  <div class="breadcrumbs" v-if="breadcrumbs.length > 1">
    <ul class="v-breadcrumbs">
      <template v-for="(item, i) in breadcrumbs">
        <li :key="item.label">
          <router-link
            class="v-breadcrumbs__item"
            :to="{ name: item.routeName }"
            v-html="item.label"
            :class="{ disabled: breadcrumbs.length - 1 == i }"
          />
        </li>
        <li
          v-if="breadcrumbs.length - 1 > i"
          class="v-breadcrumbs__divider"
          :key="item.label"
        >
          <v-icon>mdi-chevron-right</v-icon>
        </li>
      </template>
    </ul>
  </div>
</template>

在面包屑组件的scss中

.breadcrumbs {
    .disabled {
        text-decoration: none;
        color: rgba(0, 0, 0, 0.38);
        cursor: default;
    }
}

现在只在你希望的地方使用你的组件
您可以使用vuetify的breadcrumb来补充 www.example.com

相关问题