gpt4 book ai didi

angularjs - 创建提供者 ionic 3 的唯一实例

转载 作者:行者123 更新时间:2023-12-05 07:38:49 24 4
gpt4 key购买 nike

我正在创建一个 Ionic 应用程序。我有 3 个提供商——数据库提供商、投资组合提供商和用户提供商。所有 3 个都是可注入(inject)的。我这样创建它是因为其他几个页面需要使用它们的函数调用(即它们不应该共享相同的数据,它们都应该创建新实例)

投资组合和用户提供者都导入数据库提供者,因为需要进行相同的数据库调用来检索数据。

我有 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 {}

谢谢,

最佳答案

您是否从 app.module.ts(根 AppModule)中删除了提供程序?

来自 Angular 文档:

Scenario: service isolation
While you could provide VillainsService in the root AppModule (that's where you'll find the HeroesService), that would make the VillainsService available everywhere in the application, including the Hero workflows.

如果您使用 ionic-cli 生成提供程序,它会自动将其添加到根 AppModule。

关于angularjs - 创建提供者 ionic 3 的唯一实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47579752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com