Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Criar varias tabelas indexeddb

Existe alguma forma de criar mais de uma tabela no banco de dados?

8 respostas

Boa noite, Bruno! Como vai?

É possível! Inclusive, já foi resolvido no fórum do Ionic 2! Segue o link: https://cursos.alura.com.br/forum/topico-como-criar-uma-store-com-mais-de-uma-storename-39247

Grande abraço e bons estudos!

Fala Gabriel, blz! A forma de fazer é a mesma? Eu tinha visto este link porém por algum motivo ainda desconhecido no meu caso não funcionou. Mostra um erro nas funções.

Posta o seu código aqui e me diz qual é o erro que dá nas funções que eu dou uma olhada e tento te ajudar.

A parte do "new Storage" fica sublinhado em vermelho com o erro: [ts] Expected 0 arguments, but got 2.

function provideStorage1() {

  return **new Storage(['indexeddb'], {
    name: 'aluracar',
    storeName: 'agendamentos'
  });**

}
import { BrowserModule } from '@angular/platform-browser';
import { ErrorHandler, NgModule } from '@angular/core';
import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular';
import { SplashScreen } from '@ionic-native/splash-screen';
import { StatusBar } from '@ionic-native/status-bar';

import { MyApp } from './app.component';
import { HomePage } from '../pages/home/home';
import { HttpClientModule } from '@angular/common/http';
import { CarrosServiceProvider } from '../providers/carros-service/carros-service';
import { AgendamentosServiceProvider } from '../providers/agendamentos-service/agendamentos-service';
import { IonicStorageModule } from '@ionic/storage';

import 'rxjs/add/operator/finally';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/mergeMap';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/fromPromise';
import 'rxjs/add/observable/of';
import { AgendamentoDaoProvider } from '../providers/agendamento-dao/agendamento-dao';

function provideStorage1() {

  return new Storage(['indexeddb'], {
    name: 'aluracar',
    storeName: 'agendamentos'
  });

}

function provideStorage2() {

  return new Storage(['indexeddb'], {
    name: 'aluracar',
    storeName: 'clientes'
  });

}

@NgModule({
  declarations: [
    MyApp,
    HomePage
  ],
  imports: [
    BrowserModule,
    HttpClientModule,
    IonicModule.forRoot(MyApp),
    IonicStorageModule.forRoot({
      name: 'aluracar',
      storeName: 'agendamentos',
      driverOrder: ['indexeddb'] 
    })
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    HomePage
  ],
  providers: [
    StatusBar,
    SplashScreen,
    {provide: ErrorHandler, useClass: IonicErrorHandler},
    CarrosServiceProvider,
    AgendamentosServiceProvider,
    AgendamentoDaoProvider,
    { provide: 'agendamentoStorage', useFactory: provideStorage1},
    { provide: 'clienteStorage', useFactory: provideStorage2}
  ]
})
export class AppModule {}

Bruno, vou dar uma olhada nisso e assim que possível te dou um retorno!

Grande abraço!

solução!

Boa tarde, Bruno! Como vai?

Desculpe a demora a responder! É que com a sua pergunta eu acho que acabei encontrando um bug do Angular e tomei um tempo pra testar e ver o que estava acontecendo.

Com relação a sua pergunta, faça assim:

// app.module.ts

// imports omitidos

@NgModule({
  declarations: [ ... ],
  imports: [
    ...
    IonicStorageModule.forRoot()
  ],
  bootstrap: [ ... ],
  entryComponents: [ ... ],
  providers: [
    ...
    AgendamentoDaoProvider,
    UsuarioDaoProvider
  ]
})
export class AppModule {}
// agendamento-dao.ts

// imports omitidos

@Injectable()
export class AgendamentoDaoProvider {
     private _storage: Storage = new Storage({
          name: 'aluracar',
          storeName: 'agendamentos',
          driverOrder: ['indexeddb'] 
     });

     salva(agendamento) {
          // salva o agendamento no storage
     }
}
// usuario-dao.ts

// imports omitidos

@Injectable()
export class UsuarioDaoProvider {
     private _storage: Storage = new Storage({
          name: 'aluracar',
          storeName: 'usuarios',
          driverOrder: ['indexeddb'] 
     });

     salva(usuario) {
          // salva o usuario no storage
     }
}
// home.ts

// imports omitidos

export class HomePage {
     constructor( private _agendamentoDao: AgendamentoDaoProvider, private _usuarioDao: UsuarioDaoProvider) {
          // executar o método salva() do DAO que precisar.
          let agendamento = // coloca os dados do agendamento
          this._agendamentoDao.salva(agendamento);
     }
}

Explicando: Tudo que vc precisa fazer é criar uma instância de Storage dentro dos seus DAOs referente ao modelo que vc quer persistir. Daí, para salvar um dado, basta injetar o DAO e executar o método salva().

Grande abraço e bons estudos, meu aluno!

Fala Gabriel! Desculpe a demora, tive que dar uma parada aqui. Não entendi como vou injetar os dados na tabela, essa parte da home.ts.

Boa tarde, Bruno! Como vai? Agora que eu percebi que estava faltando algumas coisas no código que eu coloquei!

Já fiz a alteração. Veja se vc consegue entender agora!