Я создаю ионное приложение. У меня есть 3 провайдера - провайдер базы данных, провайдер портфолио и провайдер пользователей. Все 3 являются инъекционными. Я создал его таким образом, потому что несколько других страниц должны использовать свои вызовы функций (т.е. они не должны использовать одни и те же данные, все они должны создавать новые экземпляры)
И портфолио, и поставщик пользователей импортируют поставщика базы данных, поскольку для получения данных необходимо выполнять одни и те же вызовы базы данных.
У меня 1 страница - ViewPortfolio. Страница ViewPortfolio импортирует поставщика пользователя (чтобы узнать, кем является пользователь) и поставщика портфеля (чтобы получить данные портфолио пользователей). По какой-то причине эти 2 поставщика, похоже, используют один и тот же экземпляр для поставщика базы данных. Вот как я их использую:
ПОСТАВЩИК ПОРТФОЛИО
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 в поставщики компонентов, он не создает уникальных экземпляров. Почему это?
Я подумал, что это может быть потому, что я импортирую их обоих на одной странице, но я не уверен, почему это не работает. Как заставить двух поставщиков использовать уникальные экземпляры на базе данных провайдер, вызывая их обоих на одной странице?
Так выглядит мой файл 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 {}
Спасибо,