Angular ArviveSubject的问题是不能分配给类型错误的问题



我有一个带有角和打字稿的简单表。我将表数据从父类发送到子类(包括表),在此示例中,数据名称为 _DOMAINDATA 。它正在正确获取数据,但我想在表格上显示,我不知道如何将其分配给我的主表数据变量 domain_data

如示例:如果我在 ngOnInit()方法中说 this.domain_Data = this._domainData;

@Component({
  selector: 'mg-domain-display',
  templateUrl: './domain-display.component.html',
  styleUrls: ['./domain-display.component.scss']
})
export class DomainWhiteListingDisplayComponent implements OnInit {
  private _domainData = new BehaviorSubject<Domain[]>([]);
  displayedColumns = ['id', 'domain'];
  domain_Data: Domain[] = [];
  @Input()
  set domainData(value: Domain[]) {
    this._domainData.next(value);
  }
  get domainData() {
    return this._domainData.getValue();
  }
  constructor(private globalSettingService: GlobalSettingsService, private dialog: MatDialog) {
  }
  ngOnInit() {
    this.domain_Data = this._domainData;
  }
}

错误是类型:acrapiourSubject不能分配给类型域[]。属性'包括'type'caveniOUrSubject'

中缺少的'

正如我所说的,我的主表数据变量是domain_data:

<mat-table #table [dataSource]="domain_Data">

您需要订阅并从chitapiorSubject

获取值
  ngOnInit() {
    this._domainData.subscribe((data) => this.domain_Data = data);
  }

另外,正如很少的评论一样,您可以使用async管道在模板中subscribe

<mat-table #table [dataSource]="domain_Data | async">

通常,如果您不需要处理组件中的数据,则最好使用async管道,因为它会自动订阅。

我到了迟到了一点,但我想添加2个有关@Aragorn答案的其他信息:

  • 在使用更改tectionstrategy.onpush的组件模板中使用异步管时,请小心,因为它将完全强制强制触发生命周期检测的频率与默认策略一样频繁。

  • 第二个重要信息:不要忘记在销毁组件时取消订阅,或者如果您从未解决cishing the candieUrsubject(在这里您只需执行'Next'操作),您仍然会订阅:

subscription: ISubscription;

this.subscription = this._domainData.subscribe((data) => this.domain_Data = data);

然后在ondestroy中:

ngOnDestroy() {
   if (this.subscription) {
      this.subscription.unsubscribe();
   }
}

相关内容

最新更新