Angular 退订?关闭时注入MatDialog或MatBottomSheet的角度组件会发生什么情况?
我的建议是订阅注入matdialog或bottomsheet的组件事件 例如,让我们说我喜欢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) ] ),
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来发出这个,可能不会?我在想当用户只是关闭这个对话框,所以没有排放的情况?