Angular2 @ContentChildren未填充在父<ng-content>内部

Kev*_*ton 5 javascript angular2-components angular2-ngcontent angular

问题:

@ContentChildren似乎不适用于父<ng-content>容器。即使内容是该组件的子代。

Plunker:https ://plnkr.co/edit/J5itJmDfwKwtBsG6IveP ? p = preview

注意:我正在使用{descendants: true}

示例代码:

主要HTML:

<div>
  <child>
    <test></test>
    <test></test>
    <test></test>
  </child>
  <br><br>
  <parent>
    <test></test>
    <test></test>
    <test></test>
  </parent>
</div>
Run Code Online (Sandbox Code Playgroud)

子组件:

<h2>Child</h2>
<parent>
  <ng-content></ng-content>
</parent>
Run Code Online (Sandbox Code Playgroud)

父组件:

<h3>Parent</h3>
<ng-content></ng-content>
<div class='length'>Line count : {{length}}</div>
Run Code Online (Sandbox Code Playgroud)

问题test对于子组件,组件 的长度为0,对于父组件,组件的长度为3。


详细代码:

import {
  Component, ContentChildren, Directive
} from '@angular/core';


@Directive({selector: 'test'})
export class Test {}

@Component({
  selector: 'parent',
  template: `
    <h3>Parent</h3>
    <ng-content></ng-content>
    <div class='length'>Line count : {{length}}</div>
  `
})
export class ParentComponent  {

  @ContentChildren(Test, {descendants: true}) private tests : QueryList<Test>;

  constructor() { }

  get length () {
    return this.tests.length;
  }
}
Run Code Online (Sandbox Code Playgroud)
import {
  Component
} from '@angular/core';


@Component({
  selector: 'child',
  template: `
  <h2>Child</h2>
  <parent>
    <ng-content></ng-content>
  </parent>
  `
})
export class ChildComponent  {

  constructor() { }

}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Pen*_*gyy 3

ContentChildren将仅计算分配给current Component. 对于您的情况,在将test指令分配给 时ChildComponent,您应该对指令ChildComponent本身进行计数。

参考我从你那里分叉的这个笨蛋