【问题标题】:Angular 2 invisible component containerAngular 2 隐形组件容器
【发布时间】:2023-03-26 19:20:01
【问题描述】:

<app-root></app-root> 之类的容器确实会破坏 css 布局,尤其是在使用 flexbox 时。

是否可以有不可见的组件容器?我已经使用以下标签尝试了selector: '[app-root]',但它们都创建了一个 dom 元素:

<template>, <ng-template>, <ng-template>, <ng-container>

如果真的需要这个容器,如果 Angular 只呈现一个 HTML 注释,那就太棒了。

【问题讨论】:

  • “是否有可能有不可见的组件容器”这是否意味着您不想在 DOM 中显示标签? @米克
  • 是的,只是组件的内容,没有任何容器
  • 你说的只是内容是什么意思?你不想要选择器标签?在你的 HTML DOM 中??
  • 我不明白你这样做的目的。如果要根据条件隐藏某些模板,请添加 *ngIf="" 指令。尽量把问题说清楚
  • 只是没有 那里很难理解。没有任何容器 html dom 标签的组件模板。

标签: angular angular2-template


【解决方案1】:

我个人认为最好的方法是使用selector 作为属性。例如,你有这样的@Component:

...
@Component({
    selector: '[your-component]'
})
...

这样,your-component 是一个属性,你可以这样使用:

<div your-component>Some content...</div>

在这种情况下,您保证样式不会中断。

P.S.据我所知,该功能(Angular 1 中的 replace)在 Angular 1 中已被弃用,因此您对 Angular 2 的期望不高。

【讨论】:

  • 但我根本不想要容器,甚至不想要
  • @Mick,你不能。 Replace 功能在 Angular 1 中已被弃用
  • @AngularFrance,简单,ng-content
  • 谢谢!这正是我在 HTML 表格中创建组件所需要的。我能够将我的模板直接放在 tbody 元素上,并且所有的渲染错误都得到了修复!
【解决方案2】:

您可以在宿主元素上使用display: contents 使其对弹性框和网格布局不可见。该元素确实出现在 DOM 中,但不会干扰布局:它的子元素将遵循其祖父元素的布局规则。

不幸的是,display: contents 目前仅在 Firefox 中可用,但支持会随着时间的推移而增加。 https://caniuse.com/#feat=css-display-contents

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签