Kug*_*gel 31 angular2-routing angular
我有看起来像这样的DOM:
<app>
<router-outlet></router-outlet>
<project>...</project>
</app>
Run Code Online (Sandbox Code Playgroud)
其中project元件是由路由器插入.
如何向此元素添加类?
dre*_*ore 42
假设您始终希望将类应用于此组件,则可以host在组件元数据中使用:
@Component({
selector:'project',
host: {
class:'classYouWantApplied`
}
})
Run Code Online (Sandbox Code Playgroud)
导致:
<app>
<router-outlet></router-outlet>
<project class="classYouWantApplied">...</project>
</app>
Run Code Online (Sandbox Code Playgroud)
关键是/ deep / keyword:
:host /deep/ router-outlet + project {
display: block;
border: 10px solid black;
}
Run Code Online (Sandbox Code Playgroud)
无需任何额外配置即可使用.
:host /deep/ router-outlet + * 对于由Angular Router动态创建的任何组件.
由于Angular 4.3.0被/deep/弃用,其建议的替代方案是::ng-deep.关于此问题进行了长时间的讨论.
使用adjacent sibling selector和*通配符选择紧随在之后的元素router-outlet
styles.css
router-outlet + * {
/* your css */
}
Run Code Online (Sandbox Code Playgroud)
您可以使用 a 来执行此操作,这实际上与使用已经提到的属性HostBinding相同,尽管该方法会使用默认列表规则引发 TSLint 错误。host
在要应用类的组件中:
import { Component, HostBinding, Host (optional for typing) } from '@angular/core';
@Component({...})
export class GiveMeAClassComponent {
@HostBinding('class.some-class') someClass: Host = true;
...
}
Run Code Online (Sandbox Code Playgroud)
然后在根styles.scss文件中,您可以添加以下内容:
.some-class {
// Styles in here will now be applied to your GiveMeAClassComponent at a root level
}
Run Code Online (Sandbox Code Playgroud)
您可以使用相邻的兄弟选择器
router-outlet + project { ... }
Run Code Online (Sandbox Code Playgroud)
https://developer.mozilla.org/en/docs/Web/CSS/Adjacent_sibling_selectors
但前提是@drewmoore 的方法不适用。
小智 5
<app>
<div class="your css class">
<router-outlet></router-outlet>
</div>
</app>
Run Code Online (Sandbox Code Playgroud)
这对我有用
小智 5
目前,Angular 6 建议我使用 @HostBindings 和 @HostListeners 而不是 host 属性:
export class ProjectComponent {
@HostBinding('class') classes = 'classYouWantApplied';
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17040 次 |
| 最近记录: |