You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中ng-content无法显示带host属性组件的问题排查

Angular中ng-content无法匹配带host属性的组件问题

我正在排查Angular里ng-content无法显示带host属性组件的问题。检查生成的HTML DOM时,宿主标签上确实存在该属性,但ng-content对应的容器里没有子元素。

@编辑说明:
在@Naren Murali的回答后补充:我的需求是把position-middle作为position-panel的子组件使用时,不用手动传递middle-region属性,因为position-middle的宿主标签本身就带有这个属性。


position-panel.component

@Component({
    selector: "position-panel",
    standalone: true,
    imports: [],
    template: `
        <div class="position-panel-component">
            <div class="start-content">
                <ng-content select="[start-region]"></ng-content>
            </div>
            <div class="middle-content">
                <ng-content select="[middle-region]"></ng-content>
            </div>
            <div class="end-content">
                <ng-content select="[end-region]"></ng-content>
            </div>
        </div>
    `,
    styles: `
        .position-panel-component {
            display: flex;
            height: 100%;
            justify-content: space-between;
            width: 100%;

            > .start-content,
            > .middle-content,
            > .end-content {
                display: flex;
                height: 100%;
                justify-content: space-between;
                width: 100%;
            }

            > .start-content {
                flex-direction: row;
                justify-content: flex-start;
                align-items: center;
            }

            > .middle-content {
                flex-direction: row;
                justify-content: center;
                align-items: center;
            }

            > .end-content {
                flex-direction: row;
                justify-content: end;
                align-items: center;
            }

        }
    `
})
export class PositionPanelComponent {}

position-middle.component

@Component({
    selector: "position-middle",
    standalone: true,
    imports: [],
    template: `<ng-content></ng-content>`,
    host: {
        "middle-region": "",
    },
})
export class PositionMiddleComponent {}

home.component

@Component({
    selector: "home",
    standalone: true,
    imports: [],
    template: `
        <div class="header-bar">
            <position-panel>
                <ng-container start-region> <!-- 此部分可正常显示 -->
                    <button>Start 1</button>
                    <button>Start 2</button>
                    <button>Start 3</button>
                </ng-container>
                <position-middle> <!-- 此部分无法显示!DOM中position-panel的<div class="middle-content">无子元素 -->
                    <button>Middle 1</button>
                    <button>Middle 2</button>
                    <button>Middle 3</button>
                </position-middle>
                <div end-region> <!-- 此部分可正常显示 -->
                    <button>End 1</button>
                    <button>End 2</button>
                    <button>End 3</button>
                </div>
            </position-panel>


            <!-- DOM中生成的position-middle带有middle-region属性 -->
            <position-middle> 
                 <button>Middle 1</button>
                <button>Middle 2</button>
                <button>Middle 3</button>
            </position-middle>

        </div>
    `
})
export class HomeComponent {}

已尝试的无效方案

我试过几种给position-middle宿主标签添加属性的方式,都没用:

host: {
    "[attr.middle-region]": "", // 报错:AssertionError: Unsupported reification of ir.Expression kind: EmptyExpr
},
hostDirectives: [
    PositionMiddleDirective // DOM中未生成middle-region属性       
]

内容的提问来源于stack exchange,提问作者sartoz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 04:18:15