Angular 孩子们赢了';在查询RouterLink和RouterLink with href时,请不要加载任何数据

Angular 孩子们赢了';在查询RouterLink和RouterLink with href时,请不要加载任何数据,angular,typescript,Angular,Typescript,我试图创建一个行为与指令类似的 因此,我实现了这个示例,并添加了来自Angular的部分,其中它通过decorator获得子对象 // TODO(issue/24571): remove '!'. @ContentChildren(RouterLink, { descendants: true }) links !: QueryList<RouterLink>; // TODO(issue/24571): remove '!'. @ContentChildren(RouterLin

我试图创建一个行为与指令类似的

因此,我实现了这个示例,并添加了来自Angular的部分,其中它通过decorator获得子对象

// TODO(issue/24571): remove '!'.
@ContentChildren(RouterLink, { descendants: true })
links !: QueryList<RouterLink>;

// TODO(issue/24571): remove '!'.
@ContentChildren(RouterLinkWithHref, { descendants: true })
linksWithHrefs !: QueryList<RouterLinkWithHref>;

问题是,
链接
linksWithHrefs
变量从不填充任何内容。我错过了什么?完整的代码。我使用的是Angular 7。

有两个问题,一个与指令的实施直接相关:

  • 您没有导入
    RouterModule
    ,最重要的是调用
    将根(…)
    放入根模块。因此,锚 在根组件中,模板未绑定到的实例
    RouterLinkWithHref
    实例`

  • 你的指令是结构性的,但事实并非如此 允许您查询内容子项。这里是语言的所在 有点棘手,所以我会做一些研究,更新我的答案 稍后


  • 目前,如果您基本上通过属性1将指令重构为,那么它将按预期工作。

    关于第1项,我按照您的建议修复了RouterModule的导入,谢谢。关于2号,可能是个bug?我在github开了店。至于您的建议,我的目标是基于子链接有条件地显示容器的内容,因此恐怕属性指令还不够。
    ngAfterContentInit(): void {
        console.log("links length", this.links.length);
        console.log("linksWithHrefs length", this.linksWithHrefs.length);
    }