首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >扩展类的角ContentChildren

扩展类的角ContentChildren
EN

Stack Overflow用户
提问于 2017-05-11 23:04:07
回答 1查看 4.7K关注 0票数 17

我有三个部件。一个父组件,它可以将任意两个子组件中的一个封装在ng-内容中。我的子组件具有共享功能,因此它们正在扩展具有共享功能的抽象类。

当我尝试使用ContentChildren获取ng内容引用时,如果我使用的是其中一个子类,它就可以正常工作。当我引用抽象类时,它不起作用。有办法让这件事成功吗?http://plnkr.co/edit/f3vc2t2gjtOrusfeesHa?p=preview是:

这是我的代码:

儿童抽象课程:

代码语言:javascript
复制
    abstract export class Child{
      value: any;
      abstract setValue();
    }    

我的父代码:

代码语言:javascript
复制
@Component({
  selector: 'parent',
  template: `
    <div>
      parent
      <ng-content></ng-content>
    </div>
  `,
})
export class Parent {
  @ContentChild(Child) 
  child: Child;
  name:string;
  constructor() {

  }
   ngAfterViewInit() {
     this.child.setValue();
   }
}

第一个孩子:

代码语言:javascript
复制
@Component({
  selector: 'child1',
  template: `
    <div>
       value is: {{value}}
    </div>
  `,
})
export class Child1 extends Child {
  name:string;
  constructor() {

  }
   setValue() {this.value = 'Value from child 1'}
}

第二个孩子:

代码语言:javascript
复制
@Component({
  selector: 'child2',
  template: `
    <div>
      value is: {{value}}
    </div>
  `,
})
export class Child2  extends Child {
  name:string;
  constructor() {

  }
  setValue() {this.value = 'Value from child 2'}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-11 23:57:50

我用以下方法解决了这个问题:

到我的Child1组件装饰器中

代码语言:javascript
复制
providers: [{provide: Child, useExisting: forwardRef(() => Child1)}],

到我的Child2组件装饰器中

代码语言:javascript
复制
providers: [{provide: Child, useExisting: forwardRef(() => Child2)}],

现在,您可以从角来查看新的io示例:

https://angular.io/guide/dynamic-component-loader

票数 37
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43926916

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档