angular - Angular2 中的路由和面包屑

标签 angular angular2-routing breadcrumbs

我尝试了一些面包屑导航方法,但它们开箱即用似乎毫无用处,因为我的大部分路线都没有包含足够的信息。

例如:

/products
/product:id
/subproudcts:productId
/subproductdetail:subproductId

这些路径中的每一个都是对目录的更深入研究。 SubProduct:500 是 Product:27 等的子项。

我希望面包屑看起来像这样:

My Product A > SubProducts > Sub Product Detail B

默认情况下,上述路径不包含足够的信息,面包屑组件无法神奇地解决这个问题。

我考虑的一个解决方案是像这样延长路线:

/products/detail:id/subproducts
/products/detail:id/subproducts/detail:id

不确定这是否是面包屑组件正在寻找的“正确”方式。

我的问题是:有一个很好的自定义面包屑的好的解决方案可以 1. 显示所有路径,包括指向子列表的链接,以及 2. 显示每个选定父项的名称。

最佳答案

我会通过服务来做

import { Observable } from 'rxjs/Observable';
import { BehaviorSubject } from "rxjs"

class UrlWithNameAndOtherMeta {
    url: number;
    name: string;
    getUrl() {
        return "<a href=" + this.url + ">" + name + "</a>"
    }
}

class BreadcrumbService {
    breadcrumbEmiter = new BehaviorSubject<UrlWithNameAndOtherMeta[]>([]);
    listOfItems = [];
    push(page: UrlWithNameAndOtherMeta) {
        this.listOfItems.push(page);
        this.breadcrumbEmiter.next(this.listOfItems);
    }
    pop() {
        this.listOfItems.pop();
        this.breadcrumbEmiter.next(this.listOfItems);
     }
    get breadcrumbAsObservable() : Observable<UrlWithNameAndOtherMeta[]>{
        return this.breadcrumbEmiter.asObservable();
    }
}

然后在您的面包屑组件中订阅 breadcrumbAsObservable。之后从页面推送弹出。

附言。但老实说,我不确定我是不是在重新发明轮子 :)

关于angular - Angular2 中的路由和面包屑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41624294/

相关文章:

javascript - 如何表示面包屑 child ?

angular - Auth0 和 Angular 2 : login and routing failing using the login widget

php - 简单的动态面包屑

javascript - 存储来自服务 api 调用的响应

angular - 在执行以下代码执行之前,如何等待函数在 Angular 6 中完成执行?

javascript - 在 Angular4 之外提供静态 html

html - Angular:从卡片路由到新 View

asp.net-mvc - 用于 MVC 站点的面包屑和导航的站点地图

angular - 如何使用 RXJS 5.5.2 更新更好地捕获/执行/清空

json - 使用 Rxjs 不同运算符将整个对象与嵌套进行比较