首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Angular不渲染第二个<ng-content></ng-content>

Angular不渲染第二个<ng-content></ng-content>
EN

Stack Overflow用户
提问于 2019-10-22 22:24:32
回答 1查看 606关注 0票数 1

我正在尝试建立一个'SmartLinkComponent‘,可以区分内部和外部链接,同时,可以在标签中包装任何html内容。我想出了以下解决方案(smart-link.component.html):

代码语言:javascript
复制
<a *ngIf="!isInternal" [href]="link" target="_blank" [title]="title">
    <ng-content></ng-content>
</a>

<a *ngIf="isInternal" [routerLink]="link" [title]="title">
    <ng-content></ng-content>
</a>

解析isInternal变量的逻辑可以完美地工作,所以我不在这里包含代码。

问题是,此代码只适用于布局中出现的第一个代码。上面发布的代码只呈现!isInternal格式的链接。当我像这样交换代码时:

代码语言:javascript
复制
<a *ngIf="isInternal" [routerLink]="link" [title]="title">
    <ng-content></ng-content>
</a>

<a *ngIf="!isInternal" [href]="link" target="_blank" [title]="title">
    <ng-content></ng-content>
</a>

然后angular只为内部链接呈现<ng-content></ng-content>。当<ng-content></ng-content>没有任何相关的select指令时,它甚至似乎只能在布局中使用一次,但我找不到任何与此相关的文档。然而,这里的*ngIf条件是互斥的,所以我真的不确定是什么问题。

编辑:以下是smart-Link.Component.ts的(匿名)代码:

代码语言:javascript
复制
import {Component, Input, OnInit} from '@angular/core';

@Component({
    selector: 'app-smart-link',
    templateUrl: './smart-link.component.html',
    styleUrls: ['./smart-link.component.scss']
})
export class SmartLinkComponent implements OnInit {
    isInternal: boolean = true;
    @Input("href") originalLink: string;
    @Input() title: string;

    link: string;


    constructor() {

    }

    ngOnInit() {
        if (this.originalLink) {
            console.log('original link', this.originalLink);
            if (some rules) {
                this.isInternal = true;
                this.link = // transform link
            } else {
                this.isInternal = false;
                this.link = this.originalLink;
            }
        }
        console.log('evaluating link', this.originalLink, ' as internal ', this.isInternal, this.link);
    }

}
EN

回答 1

Stack Overflow用户

发布于 2019-10-22 22:56:27

正如@Shikha在评论中提到的,如果不指定'select‘指令,就不可能使用多个ng-content元素。使用来自angular容器存储库https://github.com/angular/angular/issues/24567的响应,我能够修复仅包含ng容器一次的解决方案,如下所示:

代码语言:javascript
复制
<a *ngIf="link && !isInternal" [href]="link" target="_blank" [title]="title">
    <ng-container *ngTemplateOutlet="linkTemplate"></ng-container>
</a>

<a *ngIf="link && isInternal" [routerLink]="link" [title]="title">
    <ng-container *ngTemplateOutlet="linkTemplate"></ng-container>
</a>

<ng-template #linkTemplate>
    <ng-content></ng-content>
</ng-template>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58506453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档