Angular 退订?关闭时注入MatDialog或MatBottomSheet的角度组件会发生什么情况?

Angular 退订?关闭时注入MatDialog或MatBottomSheet的角度组件会发生什么情况?,angular,rxjs,Angular,Rxjs,我的建议是订阅注入matdialog或bottomsheet的组件事件 例如,让我们说我喜欢 NewUser() { const formData = { Title: 'NewUser', ValidateBtn: false, FormFields: [ new InputField('Login', InputType.Text, [Validators.required, Validators.min(8), Validators.max(8) ] ),

我的建议是订阅注入matdialog或bottomsheet的组件事件 例如,让我们说我喜欢

 NewUser() {
const formData = {
  Title: 'NewUser',
  ValidateBtn: false,
  FormFields:
    [
      new InputField('Login', InputType.Text, [Validators.required, Validators.min(8), Validators.max(8) ] ),
      new InputField('name', InputType.Text,  [Validators.required, Validators.min(3), Validators.max(50) ] ),
      new InputField('surname', InputType.Text, [Validators.required, Validators.min(3), Validators.max(50) ])
    ]
 };

const dialogRef =  this.bottomSheet.open(DynamicFormsComponent,  { data: formData  }    );
 dialogRef.instance.EmitFormData.subscribe(data => {
 //post data to server
 dialogRef.dismiss();
 });
}
这很好用——InputField是我的类,帮助我在DynamicFormsComponent中生成表单字段

但是我读了很多关于订阅和取消订阅等的书。我知道它是如何工作的。
unsubscribe()
在大多数情况下都是很好的做法

在此
EmitFormData
中,我在结尾处执行
complete()
,因此无需取消订阅

但是,如果用户没有在这个DynamicFormsComponent上单击submit,而不是在这个组件之外的某个位置单击—在这个
'blur'
/background上,该怎么办呢

底部板材/板材对话框将自动关闭 但是这个订阅怎么办?我是否应该在关闭此
matdialog
时取消订阅?或者执行此操作/删除此
dialogRef
并使用它订阅


感谢并感谢您取消订阅自定义观测值(通常是避免内存泄漏所必需的),我强烈建议以下模式:

  • 创建一个在组件被销毁时发射的主题
  • 向组件中使用的每个可观察对象添加一个
    takeUntil
    操作符
private destroy$=新主题();
// ...
恩戈尼尼特(){
const myObs$=this.myService.getObs().pipe(//组件中可观察的示例
takeUntil(这个.destroy$),
//这里还有其他可以观察到的逻辑
);
}
// ...
恩贡德斯特罗(){
this.destroy$next(true);
}

谢谢-这是一个很好的选择,但与我的假设无关-我的假设是matdialog/bottomsheet中此组件出现问题时发生的情况,我不确定这是否重要。我会避免在
subscribe
调用中加入逻辑,而是使用
管道
来处理数据发射,特别是当可观察对象只发射一次时,允许您添加
take(1)
以使可观察对象自动完成。基本的经验法则是总是找到一种方法来取消订阅^^*取消订阅/完成我知道的内容,但在这种情况下,我不知道即使是这个take 1是否会被点击-如果用户没有单击submit来发出这个,可能不会?我在想当用户只是关闭这个对话框,所以没有排放的情况?