创建提供商离子3的独特实例



我正在创建一个离子应用。我有3个提供商 - 数据库提供商,投资组合提供商和用户提供商。所有3个都是可注射的。我之所以创建它,是因为其他几个页面需要使用其函数调用(即他们不应共享相同的数据,他们都应该创建新实例)

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

我有1页-VeatportFolio。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,但它并没有创建唯一的实例。为什么这是?

我认为这可能是因为我在同一页面上导入它们,但我不相信这就是为什么它不起作用的原因。我如何使两个提供商在databaseprovider上使用独特的实例,同时在同一页面上调用它们?

这是我的app.moudle.ts文件的样子(请注意,我的app.module.ts文件中不包含databaseprovider)

// ... 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(root AppModule)删除了提供商?

来自角文档:

方案:隔离服务
虽然您可以在Root AppModule中提供VillainSservice(这是您找到的Heroesservice的地方),但这将使VillainSservice在应用程序中到处都有,包括Hero Workfrows。

如果您使用离子-CLI生成了提供商,它将它自动将其添加到root AppModule中。

最新更新