我有像Angular这样的两个组件
@Component({
selector: 'content-com',
template: '<ng-content></ng-content>'
})
class ContentComponent {
// Select all the elements with .grouped css class
@ContentChildren('.grouped') grouped;
}
@Component({
selector: 'main-com',
template: `<content-com>
<div class="grouped"></div>
<div class="grouped"></div>
</content-com>`
})
class MainComponent {
}
Run Code Online (Sandbox Code Playgroud)
是否可以使用css选择器(在我的案例类选择器中)选择所有内容子项?如果没有,最好的办法是什么?
您可以通过创建指令来完成此操作.让我们Class用选择器调用它[class],字符串输入绑定到'class',并且输入变量上的hostbinding也绑定到'class'.
然后对您感兴趣的特定类进行@ContentChildren(Class, {descendants: true, read: ElementRef})过滤QueryList.
这是有片段:
// Remember to declare this in Module
@Directive({selector: '[class]'})
class Class {
@HostBinding('class') @Input('class') className: string = '';
}
@Component({
selector: 'content-com',
template: '<ng-content></ng-content>'
})
class ContentComponent implements AfterContentInit {
// Select all the elements with .grouped css class
@ContentChildren(Class, {descendants: true, read: ElementRef}) classes: QueryList<ElementRef>; // <--- Note This change
get grouped() {
if ( this.classes && this.classes.length ) {
return this
.classes
.map((elRef:ElementRef):Element => elRef.nativeElement)
.filter( (element: Element) => element.className == "grouped" );
}
return [];
}
ngAfterContentInit(){
console.log( this.grouped ); // <-- expect (2) [div.grouped, div.grouped]
}
}
Run Code Online (Sandbox Code Playgroud)
您可以更轻松地完成此操作,而无需创建指令。您必须知道ContentChildren的选择器必须是变量名。所以:
@Component({
selector: 'content-com',
template: '<ng-content></ng-content>'
})
class ContentComponent {
@ContentChildren('grouped') grouped: QueryList<ElementRef>;
}
@Component({
selector: 'main-com',
template: `<content-com>
<div class="grouped" #grouped></div>
<div class="grouped" #grouped></div>
</content-com>`
})
class MainComponent {
}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6497 次 |
| 最近记录: |