我正在创建一个 Ionic 应用程序。我有 3 个提供者——数据库提供者、投资组合提供者和用户提供者。所有 3 都是可注射的。我这样创建它是因为其他几个页面需要使用它们的函数调用(即它们不应该共享相同的数据,它们都应该创建新实例)
投资组合和用户提供者都导入数据库提供者,因为需要进行相同的数据库调用来检索数据。
我有 1 页 - ViewPortfolio。ViewPortfolio 页面导入用户提供者(以了解用户是谁)和投资组合提供者(以获取用户投资组合数据)。出于某种原因,这两个提供者似乎共享数据库提供者的同一个实例。这就是我使用它们的方式:
投资组合供应商
import { DatabaseProvider } from '../providers/database-provider';
@Injectable()
@Component({
providers: [DatabaseProvider]
})
export class PortfolioProvider {
public portfolio_list: any = new BehaviorSubject<Array<string>>([]);
constructor(private dbProvider: DatabaseProvider) {
this.dbProvider.enableDataListener(this.protfolio_path); // set path
this.dbProvider.db_listener.subscribe(value => { // subscribe to data in the path
// do stuff
});
}
}
用户组合是一样的,唯一的区别是它的收听路径不同。
但是,当我在投资组合路径中更改数据时,订阅调用也会在用户路径中触发(反之亦然)。因此,即使我在组件提供程序中添加了 DatabaseProvider,它也不会创建唯一的实例。为什么是这样?
我认为这可能是因为我将它们都导入到同一页面上,但我不相信这就是它不起作用的原因。如何让 2 个提供程序在 databaseprovider 上使用唯一实例,同时在同一页面上调用它们?
这就是我的 app.moudle.ts 文件的样子(请注意 DatabaseProvider 不包含在我的 app.module.ts 文件中)
// ... more imports
import { PortfolioProvider } from '../providers/portfolio-provider';
import { UserProvider } from '../providers/user-provider';
@NgModule({
declarations: [
MyApp,
// ... more
],
imports: [
// ... more
IonicModule.forRoot(MyApp, {
backButtonText: '',
tabsPlacement: 'bottom'
}),
IonicStorageModule.forRoot()
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
// ... more
],
providers: [
// ... more
PortfolioProvider,
UserProvider
]
})
export class AppModule {}
谢谢,