angular - 如何以角度隐藏组件但仍从父组件传递函数?
问题描述
我有这个代码:
<app-csv-confirm-dialog *ngIf="false" (confirmUpload)="addDataFromCSV()"></app-csv-confirm-dialog>
addDataFromCSV() {
console.log('hi');
}
然后在 csv-confirm-dialog 的 ts 文件中:
confirm(): void {
this.confirmUpload.emit();
}
但是似乎这不起作用,因为我没有得到console.log,无论如何我仍然可以将函数从父级传递给csv-confirm-dialog?(它必须隐藏,因为它是一个弹出对话框)
解决方案
组件需要在 DOM 中才能处理事件发射器。如果没有,您可以删除事件发射器并使用单例服务。尝试以下
共享服务.ts
@Injectable({providedIn: 'root'})
export class SharedService {
private _confirmUploadSource = new BehaviorSubject<any>(null);
public confirmUpload$ = this._confirmUploadSource.asObservable();
public setUploadStatus(value: any) {
this._confirmUploadSource.next(value);
}
}
CSVConfirmDialog 组件
export class CsvConfirmDialogComponent implements OnInit {
constructor(private sharedService: SharedService) { }
confirm(value: any): void {
this.sharedService.setUploadStatus(value);
}
}
父组件
export class AppComponent implements OnInit, OnDestroy {
completed$ = new Subject<any>();
constructor(private sharedService: SharedService) { }
ngOnInit() {
this.sharedService.confirmUpload$.pipe(
takeUntil(this.completed$)
).subscribe(
value => {
console.log('hi');
// do what you were going to do in `addDataFromCSV()` function
}
);
}
ngOnDestroy() {
this.completed$.next(); // <-- close the observables
this.completed$.complete();
}
}
推荐阅读
- kubernetes - Kubernetes HPA 使用来自另一个部署的指标
- javascript - VueJs 中未定义的函数
- python - 如何在windbg上制作python脚本以使其更容易使用?
- ggplot2 - 如何在分组条形图中的多个面板中包装冗长的标签
- microsoft-graph-api - 如何使用 MS Graph 端点扫描所有 O365 角色和拥有哪个角色的用户
- kubernetes - 如何在 Kubernetes 中定义静态 ClusterIP?
- c - sscanf 无法读取文本文件的最后一行
- sql - Sql 中的除法返回 0 或 NULL
- reactjs - React:从基于类的组件转变为基于功能的组件
- django - 导入 xlsx 中的 django 导入导出错误