我在一个应用程序上工作,它有一个主视图,里面渲染了几个指名子router-outlet .代码如下:
App.Component.html:
<router-outlet />
App.routes.ts:
export const routes: Routes = [
{ path: '', component: SlotsView, children: [
{
path: '',
outlet: 'slotA',
component: RouterOutlet1,
},{
path: '',
outlet: 'slotB',
component: RouterOutlet2,
}
]
},
];
Slots.view.html:
This is a view with some child routes
<br>
<router-outlet name="slotA"></router-outlet>
<br>
<router-outlet name="slotB"></router-outlet>
RouterOutlet1:
- Html:
I am Router outlet 1
- 更少:
:host{
background-color: #f88;
}
- TS:
@Component({
templateUrl: './router-outlet-1.router-outlet.html',
styleUrls: ['./router-outlet-1.router-outlet.less'],
encapsulation: ViewEncapsulation.Emulated,
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: true
})
// eslint-disable-next-line @angular-eslint/component-class-suffix
export class RouterOutlet1{
}
RouterOutlet2:
- Html:
I am Router outlet 2
- 更少:
:host{
background-color: #88f;
}
- TS:
@Component({
templateUrl: './router-outlet-2.router-outlet.html',
styleUrls: ['./router-outlet-2.router-outlet.less'],
encapsulation: ViewEncapsulation.Emulated,
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: true
})
// eslint-disable-next-line @angular-eslint/component-class-suffix
export class RouterOutlet1{
}
请注意,两个router-outlet 之间的不同之处在于,router-outlet 1应该是略带红色(#f88
),而router-outlet 2应该是蓝色(#88f
).
这是实际发生的情况:
In DevTools I see that both host elements have the same attribute (_nghost-ng-c4243086843
)
这就是为什么相同的风格被应用到他们两个.
如果我将两个router-outlet 上的encapsulation
更改为ShadowDom
,则结果正确呈现:
问题是:
这是Angular中的一个bug,应该向开发人员报告,还是有充分的理由将Router outlet 1的样式应用于Router outlet 2?
我已经在谷歌上搜索了一下,还没有找到这样的错误报告.
我试着改变encapsulation
模式.
- 对于
None
,不会将样式应用于:host
规则,如下所述:Is it possible to style using :host with Encapsulation.None in Angular? -
ShadowDom
可以正常使用,但除非必要,否则我不想使用它