问题可能是由于引入的rxjs版本与Angular Material版本不兼容导致的。
解决方法是安装与angular core和material相对应的rxjs版本。例如,如果你使用的是Angular 10和Angular Material 10,请安装rxjs-compat@6:
npm install rxjs-compat@6
然后,在您的代码中导入它,例如:
import { Subject } from 'rxjs/Subject';
import 'rxjs/add/operator/takeUntil';
import { takeUntil } from 'rxjs/operators';
将您的代码与rxjs管道操作符takeUntil()进行合并即可解决问题。例如:
import { Component, OnInit, Inject, OnDestroy } from '@angular/core'; import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; import { Subject } from 'rxjs/Subject'; import 'rxjs/add/operator/takeUntil'; import { takeUntil } from 'rxjs/operators';
@Component({ selector: 'app-example-dialog', templateUrl: './example-dialog.component.html', styleUrls: ['./example-dialog.component.scss'] }) export class ExampleDialogComponent implements OnInit, OnDestroy {
private unsubscribe$ = new Subject
constructor(
private dialogRef: MatDialogRef
ngOnInit() { this.dialogRef.afterClosed() .pipe(takeUntil(this.unsubscribe$)) .subscribe((result) => { console.log('Dialog result:', result); }); }
ngOnDestroy() { this.unsubscribe$.next(); this.unsubscribe$.complete(); }
onCloseDialog(result: boolean) { this.dialogRef.close(result); }
}
请注意,我们现在在组件中创建了一个unsubscribe$主题,这将被用于在组件销毁时取消订阅。这是为了避免可能的内存泄漏。
最后,我们在ngOnDestroy()生命周期方法中调用unsubscribe()来清理我们创建的任何订阅。