angular - 渲染一个没有任何包装标签的角度模板
问题描述
我在这里陷入困境。致力于重构一堆相当混乱的 Angular 组件及其模板的 HTML。
问题是在一种特殊情况下,我不能在 DOM 中拥有父元素。现在,模板选择器设置如下:
<thisComponent *nIf="blah" [someParam]="hello"><thisComponent>
这在 DOM 中呈现:
<thisComponent>
<div>Hello</div>
<div>World</div>
<thisComponent>
这破坏了我们想要使用的 CSS,并与正在呈现的其余内容保持一致。
我想在没有父thisComponent
元素的情况下进行上述工作。
我在想这样的事情可能会奏效:
<ng-container thisComponent *nIf="blah" [someParam]="hello"></ng-container>
(然后将选择器更改为属性选择器 ala [thisComponent]
)
但似乎这不起作用。
有没有办法在 DOM 中不渲染父元素的情况下完成上述操作?
更多的上下文。还有另一个重复的问题建议使用属性选择器,但问题是您仍然需要父元素(带有属性)。理想情况下,角度将允许该父元素成为 ng-container,它不会呈现父元素。但这不受支持。
为什么需要这样做:
CSS 喜欢干净的 DOM 结构,一些特性完全依赖于它……即 flex 布局。当 flex 容器和 flex 对象之间有额外的 DOM 层时,Flex 布局会完全中断。
解决方案
显然,此时的答案是否定的,Angular 不支持这一点并且总是需要一个父宿主元素。
这是一个问题,似乎其他人已要求通过此功能请求以角度修复此问题。
这是一个有趣的阅读。一个常见的建议是获得我上面建议的角度支持,即使用 ng-container 作为宿主元素的能力:
<ng-container mySelector></ng-container>
唉,这不是 Angular 支持的。
上述功能请求讨论中最好的解决方法建议可能是这个建议的 css 属性:
<app-my-component style="display: contents"></app-my-component>
这(通过 CSS)完全符合我的要求。不幸的是,Safari 对此的支持有一些非常重要的警告,使其无法满足我的需求。
在这一点上,看起来我需要放弃让 Angular 尊重特定的 DOM 结构,而是需要创建不同的 CSS 来处理我们试图放在一起的布局。
推荐阅读
- mysql - 从 MYSQL 中的动态 SQL 获取特定字段值
- python - 如何更改 Plotly Wind 玫瑰极轴?
- docker - 如何在智能云上部署 docker react 应用程序
- ios - 当“App Identifier”更新其 APNS 证书时,是否需要重新生成 Apple“Provisioning Profiles”?
- angular - 我的 Angular 9 应用程序滚动事件有一个问题,它确实会触发,但我正在更新的类名不会更新 dom
- .net - 以编程方式在 System.Web.MimeMapping 中添加自定义 MIME 类型
- angular - 角材料选择不打开选项
- python-3.x - 具有奇怪值范围的 matplotlib.pyplot 热图
- c# - C# FirebirdClient:无法执行 INSERT 语句
- php - Laravel 问题:请检查为什么这段代码会这样?