在Angular 7+中,在应用子模块中使用适配器重写服务的解决方法可以如下所示:
export interface Adapter {
adapt(item: any): T;
}
import { Injectable } from '@angular/core';
@Injectable()
export class OriginalService {
getData(): any[] {
// 原始服务的数据获取逻辑
return [
{ id: 1, name: 'Item 1' },
{ id: 2, name: 'Item 2' },
{ id: 3, name: 'Item 3' }
];
}
}
import { Injectable } from '@angular/core';
import { Adapter } from './adapter.interface';
import { OriginalService } from './original.service';
@Injectable()
export class AdapterService implements Adapter {
constructor(private originalService: OriginalService) {}
adapt(item: any): any[] {
// 适配器的数据转换逻辑
return item.map(i => {
return {
id: i.id,
label: i.name
};
});
}
getData(): any[] {
const originalData = this.originalService.getData();
return this.adapt(originalData);
}
}
import { NgModule } from '@angular/core';
import { OriginalService } from './original.service';
import { AdapterService } from './adapter.service';
@NgModule({
providers: [
OriginalService,
AdapterService
]
})
export class SubModule { }
import { Component } from '@angular/core';
import { AdapterService } from './adapter.service';
@Component({
selector: 'app-sub',
template: `
Data:
- {{ item.label }}
`
})
export class SubComponent {
data: any[];
constructor(private adapterService: AdapterService) {
this.data = this.adapterService.getData();
}
}
以上代码示例中,原始服务(OriginalService)用于获取原始数据,适配器服务(AdapterService)用于将原始数据转换为适用于子模块的数据格式。在应用子模块中,通过在提供商(providers)中注册原始服务和适配器服务,可以在子组件中使用适配器服务来获取适用于子模块的数据。