Angular:如何从IonicStorageModule使用存储?

时间:2019-05-18 12:03:04

标签: angular ionic4

我是Angular的新手,我想在documentation之后在这里配置Singleton服务。

好吧,我的服务需要导入存储。 因此,我这样做了,但是它没有按我期望的那样工作:

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中收到一条错误消息:

  

“类型{storage:typeof 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   
        // ...
    }
    // ...
}

1 个答案:

答案 0 :(得分:0)

如果您的TaskServiceModule(如名称所示)是一个模块,那么它首先应该进入imports数组而不是providers。查看模块的forRoot(...)实现也将很有帮助,但是我敢肯定您甚至不需要它。

通过导入IonicStorageModule,您已经完成了在模块中使用其服务所需的操作,因为它会导出相关的服务。有关更多信息,您可能需要看看their docs

如果Protocol也是您的服务,只需将其与您要向您的模块公开的其他服务一起放在providers中,就像这样:

providers: [
    ...
    Protocol
]

请注意,这实际上与使用以下命令装饰服务相同:

@Injectable({
    providedIn: AppModule
})

您可以查看this article,以更好地了解依赖项注入的不同方式。

现在,您也可以选择将TaskService的装饰器更改为:

@Injectable({
    providedIn: 'root'
})

只是:

@Injectable()

因此可以像在AppModule中介绍的那样,在您的Protocol中提供您的服务。 我个人认为,这可以使您更好地了解如何在Angular中提供服务,尤其是如果您不熟悉该主题。请记住,这是可选的!

为了给您更好的解决问题的建议,您需要与我们分享有关您的项目结构的更多信息。

我希望这已经对您有所帮助!