Angular 9 : Abstract component's children not inheriting its attributes

标签 angular

我有一个具有相似属性的组件的模块,所以我创建了一个抽象 MyFilter<T>具有一组带有 @Injectable 的属性的组件装饰工。升级到 Angular 9 后,我在控制台收到警告

Can't bind to 'form' since it isn't a known property of 'my-text-filter'.



和错误,因为子组件无法识别父组件的属性。这是一些代码:

@Injectable()
export abstract class MyFilter<T> {

  @Input() form: FormGroup;
  @Input() filterOpened: boolean;
  @Input() enableSubmit: boolean;
  @Output() filterUsed = new EventEmitter<T>();

  abstract useFilter();
}

这是一个子组件:

@Component({
  selector: 'my-text-filter',
  templateUrl: './text-filter.html',
  styleUrls: ['./text-filter.scss']
})
export class MyTextFilter extends MyFilter<TextFilter> implements OnInit, OnChanges {

  constructor() {
    super();
  }

  ngOnInit() {
    this.form.get('value').valueChanges.pipe( // ERROR: cannot find 'get' of undefined
        debounceTime(50)
    ).subscribe(() => this.useFilter());
  }

  ngOnChanges(changes: SimpleChanges) {
    console.log(changes) // this doesn't get logged in the console, 
                         // even if I comment out what's in ngOnInit
  }

  useFilter() {
  }

}

最佳答案

您需要使用 @Directive装饰器能够从另一个组件扩展它:

@Directive()
export abstract class MyFilter<T> {

  @Input() form: FormGroup;
  @Input() filterOpened: boolean;
  @Input() enableSubmit: boolean;
  @Output() filterUsed = new EventEmitter<T>();

  abstract useFilter();
}

关于 Angular 9 : Abstract component's children not inheriting its attributes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60602955/

相关文章:

Angular 2 RC4 新路由器警告消息

Angular 2 : Difference between property binding with and without brackets?

angular - 如何检查x-session的状态?

angular - 如何使用 typescript 禁用 ionic 选择。 ionic 2

node.js - 如何在 Ionic 2 中为在本地主机中运行的 Node 服务器发送发布请求?

angular - “属性 'serviceData' 在类型 'GeoService' 上不存在。” typescript Angular2

javascript - 无法推送嵌套数组中子级的数据子级

javascript - angular ngrx store 参数化内存选择器

angular - 传单标记点击始终显示最后一个元素

用于将数字格式化并打印为正数的 Angular HTML 代码(不带减号)