Meu storage não funciona, dá erro quando carregar a tela de cadastro. Acredito que o problema seja com o Storage mesmo...
O erro que recebo é o seuginte:
Uncaught (in promise): Error: No available storage method found.
Error: No available storage method found.
at http://localhost:8100/build/vendor.js:113412:25
at t.invoke (http://localhost:8100/build/polyfills.js:3:14356)
at Object.onInvoke (http://localhost:8100/build/vendor.js:4247:33)
at t.invoke (http://localhost:8100/build/polyfills.js:3:14296)
at r.run (http://localhost:8100/build/polyfills.js:3:9523)
at http://localhost:8100/build/polyfills.js:3:19622
at t.invokeTask (http://localhost:8100/build/polyfills.js:3:15040)
at Object.onInvokeTask (http://localhost:8100/build/vendor.js:4238:33)
at t.invokeTask (http://localhost:8100/build/polyfills.js:3:14961)
at r.runTask (http://localhost:8100/build/polyfills.js:3:10214)
Cadastro.ts
import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, AlertController, Alert } from 'ionic-angular';
import { Carro } from '../../models/Carro';
import { AgendamentosServiceProvider } from '../../providers/agendamentos-service/agendamentos-service';
import { HomePage } from '../home/home';
import { Agendamento } from '../../models/Agendamento';
import { Storage } from '@ionic/storage';
import { Observable } from 'rxjs/Observable';
/**
* Generated class for the CadastroPage page.
*
* See https://ionicframework.com/docs/components/#navigation for more info on
* Ionic pages and navigation.
*/
@IonicPage()
@Component({
selector: 'page-cadastro',
templateUrl: 'cadastro.html',
})
export class CadastroPage
{
public carro: Carro;
public precoTotal: number;
private _alerta: Alert;
// Atributos do formulário
public nome: string = '';
public endereco: string = '';
public email: string = '';
public data: string = new Date().toISOString();
constructor(public navCtrl: NavController,
public navParams: NavParams,
private _agendamentosService: AgendamentosServiceProvider,
private _alertCtrl: AlertController,
private _storage: Storage)
{
this.carro = this.navParams.get('carroSelecionado');
this.precoTotal = this.navParams.get('precoTotal');
}
agenda()
{
if (!this.nome || !this.endereco || !this.email)
{
this._alertCtrl.create({
title: 'Preenchimento obrigatório',
subTitle: 'Preencha todos os campos!',
buttons: [
{ text: 'OK' }
]
})
.present();
return;
}
this._alerta = this._alertCtrl.create({
title: 'Aviso',
buttons: [
{
text: 'OK',
handler: () => { // handler serve para dizer ao botão o que fazer quando for clicado
this.navCtrl.setRoot(HomePage);
}
}
]
});
let agendamento: Agendamento = {
nomeCliente: this.nome,
enderecoClilente: this.endereco,
emailCliente: this.email,
modeloCarro: this.carro.nome,
precoTotal: this.precoTotal,
enviado: false,
confirmado: false
};
let mensagem = '';
this._agendamentosService.agenda(agendamento)
.mergeMap( // esse método vai juntar o Observable de resposta do método agenda do _agendamentosService com o Observable do método salva
() => this.salva(agendamento)
)
.finally(
() => {
this._alerta.setSubTitle(mensagem);
this._alerta.present();
}
)
.subscribe(
() => {
mensagem = 'Agendamento deu certo';
},
() => {
mensagem = 'Houve um erro no agendamento';
}
);
}
salva(agendamento)
{
let chave = this.email + this.data.substr(0,10);
let promise = this._storage.set(chave, agendamento);
// Para usar o Observable do RxJS e não a Promise do JS
return Observable.fromPromise(promise);
}
}