Angular: 如何使用 IonicStorageModule 中的 Storage?
Angular: how to use Storage from IonicStorageModule?
我是 Angular 的新手...我正在尝试在此处配置 Singleton 服务,遵循 documentation.
嗯,我的服务需要导入Storage。
所以我这样做了,但它没有像我预期的那样工作:
app.modules.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';
import { IonicModule, IonicRouteStrategy, ModalController } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { ModalWeek } from './modal/modal';
import { FormsModule } from '@angular/forms';
import { IonicStorageModule } from '@ionic/storage';
import { Storage } from '@ionic/storage';
import { Protocol } from './protocol';
let obj = {
storage: Storage,
weeks: new Protocol
}
@NgModule({
declarations: [AppComponent, ModalWeek],
exports: [ModalWeek],
entryComponents: [ModalWeek],
imports: [
BrowserModule,
IonicModule.forRoot(),
AppRoutingModule,
FormsModule,
IonicStorageModule.forRoot()
],
providers: [
StatusBar,
SplashScreen,
TaskServiceModule.forRoot(obj), // *** my service *** //
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
],
bootstrap: [AppComponent]
})
export class AppModule {}
我从 VS Code 收到一条错误消息:
"Argument of type {storage: typeof Storage} is not assignable (...)
storage does not exist in type Storage"
更新
import { Injectable } from '@angular/core';
import { Storage } from '@ionic/storage';
import { Protocol } from 'src/app/protocol';
@Injectable({
providedIn: 'root', // it is a Singleton
})
export class TaskService {
private weeks: any
private protocol: any
constructor (private storage: Storage, protocol: Protocol) {
this.storage = storage
this.protocol = protocol
// ...
}
// ...
}
如果您的 TaskServiceModule
(顾名思义)是一个模块,那么它应该首先进入您的 imports
数组而不是 providers
。查看模块的 forRoot(...)
实现也会很有帮助,但我敢肯定您甚至不需要它。
通过导入 IonicStorageModule
,您已经完成了在您的模块中使用它的服务所需的操作,因为它导出了相关服务。有关这方面的更多信息,您可能想看看 their docs。
如果 Protocol
也是您的服务,只需将它与您想要向模块公开的其他服务一起放在 providers
中,如下所示:
providers: [
...
Protocol
]
请注意,这实际上与用以下方式装饰您的服务相同:
@Injectable({
providedIn: AppModule
})
您可以查看 this article 以更好地了解不同的依赖注入方式。
现在您还可以选择更改 TaskService
的装饰器:
@Injectable({
providedIn: 'root'
})
只是:
@Injectable()
因此,在您的 AppModule
中提供您的服务,就像我们已经介绍过的 Protocol
一样。 我个人认为这可以让您更好地了解 Angular 中的服务是如何提供的,尤其是如果您是该主题的新手。 请记住,这是可选的!
为了就如何解决您的问题向您提供更好的建议,您需要与我们分享有关您的项目结构的更多信息。
希望这对您有所帮助!
我是 Angular 的新手...我正在尝试在此处配置 Singleton 服务,遵循 documentation.
嗯,我的服务需要导入Storage。 所以我这样做了,但它没有像我预期的那样工作:
app.modules.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';
import { IonicModule, IonicRouteStrategy, ModalController } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { ModalWeek } from './modal/modal';
import { FormsModule } from '@angular/forms';
import { IonicStorageModule } from '@ionic/storage';
import { Storage } from '@ionic/storage';
import { Protocol } from './protocol';
let obj = {
storage: Storage,
weeks: new Protocol
}
@NgModule({
declarations: [AppComponent, ModalWeek],
exports: [ModalWeek],
entryComponents: [ModalWeek],
imports: [
BrowserModule,
IonicModule.forRoot(),
AppRoutingModule,
FormsModule,
IonicStorageModule.forRoot()
],
providers: [
StatusBar,
SplashScreen,
TaskServiceModule.forRoot(obj), // *** my service *** //
{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
],
bootstrap: [AppComponent]
})
export class AppModule {}
我从 VS Code 收到一条错误消息:
"Argument of type {storage: typeof Storage} is not assignable (...) storage does not exist in type Storage"
更新
import { Injectable } from '@angular/core';
import { Storage } from '@ionic/storage';
import { Protocol } from 'src/app/protocol';
@Injectable({
providedIn: 'root', // it is a Singleton
})
export class TaskService {
private weeks: any
private protocol: any
constructor (private storage: Storage, protocol: Protocol) {
this.storage = storage
this.protocol = protocol
// ...
}
// ...
}
如果您的 TaskServiceModule
(顾名思义)是一个模块,那么它应该首先进入您的 imports
数组而不是 providers
。查看模块的 forRoot(...)
实现也会很有帮助,但我敢肯定您甚至不需要它。
通过导入 IonicStorageModule
,您已经完成了在您的模块中使用它的服务所需的操作,因为它导出了相关服务。有关这方面的更多信息,您可能想看看 their docs。
如果 Protocol
也是您的服务,只需将它与您想要向模块公开的其他服务一起放在 providers
中,如下所示:
providers: [
...
Protocol
]
请注意,这实际上与用以下方式装饰您的服务相同:
@Injectable({
providedIn: AppModule
})
您可以查看 this article 以更好地了解不同的依赖注入方式。
现在您还可以选择更改 TaskService
的装饰器:
@Injectable({
providedIn: 'root'
})
只是:
@Injectable()
因此,在您的 AppModule
中提供您的服务,就像我们已经介绍过的 Protocol
一样。 我个人认为这可以让您更好地了解 Angular 中的服务是如何提供的,尤其是如果您是该主题的新手。 请记住,这是可选的!
为了就如何解决您的问题向您提供更好的建议,您需要与我们分享有关您的项目结构的更多信息。
希望这对您有所帮助!