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

Como criar uma Store com mais de uma storeName

Por exemplo, qual seria o processo para criar a Storage 'Restaurante' com as storeNames: 'cardapio' e 'clientes'

6 respostas

A documentação não deixa claro esse suporte. Contudo você pode criar um Storage para cada storage que deseje trabalhar. Mas a injeção de dependência será por string e não tipo.

Eu mostro como assim que estiver no meu computador. Vamos torcer, porque segundo esse post não há suporte ainda:

https://forum.ionicframework.com/t/multiple-instances-support-in-ionic-storage-v-1-1-7/73875

Se não quiser esperar, talvez usar o Sqlite diretamente seja solução. Mas escreverá muito código! Segue exemplo

https://www.thepolyglotdeveloper.com/2015/12/use-sqlite-in-ionic-2-instead-of-local-storage/

solução!

Vitor, a solução que eu vou lhe mostrar, você só pode aplicar quando chegar no último capítulo da parte 2 do curso de Ionic2, certo?

Então, você precisa criar duas funções que retornam um provider. Cada função retorna uma configuração para uma storage do Ionic. Vejamos:

import { NgModule, ErrorHandler } from '@angular/core';
import { IonicApp, IonicModule, IonicErrorHandler } from 'ionic-angular';
import { MyApp } from './app.component';
import { HomePage } from '../pages/home/home';
import { EscolhaPage } from '../pages/escolha/escolha';
import { CadastroPage } from '../pages/cadastro/cadastro';
import { AgendamentoService } from '../domain/agendamento/agendamento-service';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/toPromise';
import { Storage } from '@ionic/storage';
import { AgendamentoDao } from '../domain/agendamento/agendamento-dao';
import { AgendamentosPage } from '../pages/agendamentos/agendamentos';
import { LoginPage } from '../pages/login/login';
import { UsuarioService } from '../domain/usuario/usuario-service';
import { PerfilPage } from '../pages/perfil/perfil';


// PRIMEIRO PROIDER, PARA agendamentos
function provideStorage1() {

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

}

// SEGUNDO PROVIDER, para clientes
function provideStorage2() {

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

}
@NgModule({
  declarations: [
    MyApp,
    HomePage, 
    EscolhaPage, 
    CadastroPage, 
    AgendamentosPage, 
    LoginPage, 
    PerfilPage
  ],
  imports: [
    IonicModule.forRoot(MyApp)
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,
    HomePage, 
    EscolhaPage, 
    CadastroPage, 
    AgendamentosPage, 
    LoginPage, 
    PerfilPage
  ],
  providers: [
    { provide: ErrorHandler, useClass: IonicErrorHandler }, 
    AgendamentoService,
    { provide: 'agendamentoStorage', useFactory: provideStorage1},
    { provide: 'clienteStorage', useFactory: provideStorage2},
    AgendamentoDao, 
    UsuarioService
  ]
})
export class AppModule {}

Veja que os dois providers foram adicionamos com os apeldos agendamentoStorage e clienteStorage.

Dai, a injeção do Storage muda. Você não pode mais injetar por tipo, precisará injetar pelos nomes agendamentoStorage e clienteStorage:

Em AgendamentoDao, a injeção ficaria assim:

import { Injectable, Inject } from '@angular/core';
import { Agendamento } from '../../domain/agendamento/agendamento';
import { Storage } from '@ionic/storage';
import { Carro } from '../../domain/carro/carro';

@Injectable()
export class AgendamentoDao {

    constructor(
        @Inject('agendamentoStorage') private _agendamentoStorage: Storage, 
        @Inject('clienteStorage') private _clienteStorage: Storage
    ) {}

// código posterior omitido

Se quiser os dois, basta injetar os dois no constructor. Essa é uma solução não documentada baseada no conhecimento do Angular e não da plataforma Ionic2.

Como eu disse, deixe para fazer essa alteração só no último capítulo da parte 2 do curso.

Sucesso e bom estudo!

Obrigado pela ajuda Flávio, na verdade eu ja terminei a carreira de ionic 2. Tenho um projeto pra fazer da faculdade e vou aproveitar pra fazer em ionic pra ir treinando o que aprendi. Vou testar sua solução, espero que me atenda.

Novamente, obrigado pela ajuda !

Flávio, obrigado pela ajuda !!! Funcionou muito bem para o que eu precisava.

Segue o url do projeto: https://github.com/vitordelfino/Restaurante-ES3

Id no Ionic View: 290f0c5c

Assim que der uma folga aqui dou uma olhada. Esse ionic view é da hora para compartilhar!

Ficou bem organizado. Aliás você usou a organização de pastas by feature que uso no curso. Eu a prefiro em vez de ser by type.

Parabéns!