我在使用Angular router-oulet时遇到了麻烦,因为它向DOM添加了新元素,并且它影响了应用的CSS规则,因为它破坏了某些元素的父子关系。这是我的意思的一个例子:
正如您所看到的,每个<router-outlet></router-outlet>
之后是插入的组件选择器(代码中为app-fwc-dashboard-main
和app-fwc-policy-main
),并且所有组件模板标记都位于其下方。这使得有些CSS规则未应用且布局中断。
我一直在比较一个版本与另一个版本的代码,并且我已经意识到组件选择器具有类ng-star-inserted
所以我试图添加缺少的CSS规则,像这样:
.grid-y > .ng-star-inserted > .auto, .grid-y > .ng-star-inserted > .shrink {
height: auto;
}
.grid-y > .ng-star-inserted > .cell {
width: auto;
}
(etc)
但是,由于某种原因我找不到,它没有用。所以我的问题是:有没有办法告诉Angular路由器插座只注入组件模板标记并避免添加选择器?
或者对此问题还有其他建议吗?提前谢谢!
答案 0 :(得分:0)
我认为这是不可能的。
我认为你有两种可能的解决方案:
删除css中的>
选择器。
在css中包含组件选择器。
如果这些对你不起作用,我建议以一种更容易使用的方式重写代码。
答案 1 :(得分:0)
您可以为Component使用属性选择器。
在样式中使用@HostBinding
和css选择器:host
添加类。
@Component({
selector: '[attributeSelector]',
template: 'red text',
styles: [':host {color: red}'],
})
class A {
@HostBinding('class') class = 'boundClass';
}
在这种情况下,router-outlet
会创建类似
<router-outlet></router-outlet>
<div attributeSelector class="boundClass" nghost_1>red text</div>
答案 2 :(得分:0)
Ilia Volk的回答向我展示了寻找解决方案的正确途径。我将组件选择器更改为:
selector: '[app-vpn-component].grid-y.medium-grid-frame',
这样,渲染的标记为:
<div app-fwc-vpn-main="" class="grid-y medium-grid-frame ng-star-inserted">
...
</div>
现在布局看起来像以前一样。