如何解决 Angular 循环依赖
How to work around Angular Circular Dependency
我在 Angular 工作,并且有一个调用服务的组件。该服务用于调用 API,但问题是我必须根据用户正在查看的选项卡使用某些参数 post 到 API。因此,我可以获取组件中的活动选项卡,但随后需要将其传递给服务,以便服务可以 post 使用该参数。
服务 -> 组件
服务 <- 组件
很明显的循环依赖,但如何解决?
这就是我在 service.ts
中获取需要传递给我的 observable 的选项卡的方式
details.component.ts
tabChanged = (tabChangeEvent: MatTabChangeEvent): number => {
console.log("tabChangeEvent => ", tabChangeEvent);
console.log("index => ", tabChangeEvent.index);
return tabChangeEvent.index;
};
这是当前的文件结构
我通过首先将组件导入服务来从服务内部的组件获取活动选项卡
import { DetailsComponent } from "./details/details.component";
然后在我的构造函数中声明它
constructor(private http: HttpClient, private details: DetailsComponent) {}
最后尝试将活动选项卡信息拉入我的可观察对象以替换我拥有的 "static" 参数。
public getPunchDataToday(): Observable<any> {
let today: string | number | Date = new Date();
today = this.formatDate(today);
let tab = this.details.tabChanged;
return this.getPunchData("", "static", today, today);
}
在尝试保存和获取之前,我已经了解了这么多
WARNING in Circular dependency detected:
src\app\portal\dashboard\details\details.component.ts -> src\app\portal\dashboard\timerack.service.ts -> src\app\portal\dashboard\details\details.component.ts
我可能应该展示的最后一件事是,我从一个数组中获取所有 mat-tab 选项卡,该数组具有定义名称和 ID 的对象。我在界面上显示了名称,但需要 API 调用的 ID。
<mat-tab-group #tabGroup (selectedTabChange)="tabChanged($event)">
<mat-tab
*ngFor="let tab of tabs; let i = index"
label="{{ this.tabs[i].name }}"
>
很简单....
我通过了这样的论点
public getPunchDataToday(location: string): Observable<any> {
let today: string | number | Date = new Date();
today = this.formatDate(today);
return this.getPunchData("", location, today, today);
}
这样,一切都发生在组件内部。
我在 Angular 工作,并且有一个调用服务的组件。该服务用于调用 API,但问题是我必须根据用户正在查看的选项卡使用某些参数 post 到 API。因此,我可以获取组件中的活动选项卡,但随后需要将其传递给服务,以便服务可以 post 使用该参数。
服务 -> 组件
服务 <- 组件
很明显的循环依赖,但如何解决?
这就是我在 service.ts
中获取需要传递给我的 observable 的选项卡的方式details.component.ts
tabChanged = (tabChangeEvent: MatTabChangeEvent): number => {
console.log("tabChangeEvent => ", tabChangeEvent);
console.log("index => ", tabChangeEvent.index);
return tabChangeEvent.index;
};
这是当前的文件结构
我通过首先将组件导入服务来从服务内部的组件获取活动选项卡
import { DetailsComponent } from "./details/details.component";
然后在我的构造函数中声明它
constructor(private http: HttpClient, private details: DetailsComponent) {}
最后尝试将活动选项卡信息拉入我的可观察对象以替换我拥有的 "static" 参数。
public getPunchDataToday(): Observable<any> {
let today: string | number | Date = new Date();
today = this.formatDate(today);
let tab = this.details.tabChanged;
return this.getPunchData("", "static", today, today);
}
在尝试保存和获取之前,我已经了解了这么多
WARNING in Circular dependency detected:
src\app\portal\dashboard\details\details.component.ts -> src\app\portal\dashboard\timerack.service.ts -> src\app\portal\dashboard\details\details.component.ts
我可能应该展示的最后一件事是,我从一个数组中获取所有 mat-tab 选项卡,该数组具有定义名称和 ID 的对象。我在界面上显示了名称,但需要 API 调用的 ID。
<mat-tab-group #tabGroup (selectedTabChange)="tabChanged($event)">
<mat-tab
*ngFor="let tab of tabs; let i = index"
label="{{ this.tabs[i].name }}"
>
很简单.... 我通过了这样的论点
public getPunchDataToday(location: string): Observable<any> {
let today: string | number | Date = new Date();
today = this.formatDate(today);
return this.getPunchData("", location, today, today);
}
这样,一切都发生在组件内部。