检查存储的内容时,会话值返回null

时间:2018-10-05 16:55:49

标签: angular typescript session ionic-framework

我正在开发一个离子应用程序,因此我需要创建一个会话,因此当用户登录时,我已经存储了他的名字,然后我可以检查用户是否真正登录。为此,我创建了一个模型类和一个用户类。我的问题是,当我尝试控制台记录存储在ionic中的值时,它返回空值,这是一幅图像,解释了输出结果:

enter image description here

我不明白为什么它会像'0: 'n', 1: 'o', 2: 'm', 3: 'e'那样记录日志。 我要做的是将用户名存储在会话中,并同时登录。

这就是我的做法:

import { Storage } from "@ionic/storage";
import { Injectable } from '@angular/core';
import { Usuario } from "./interface/usuario";

@Injectable()
export class Session {

    constructor(public storage: Storage){}

    create(usuario: Usuario) {
        this.storage.set('usuario', usuario);
    }

    get(): Promise<any> {
        return this.storage.get('usuario');
    }

    remove() {
        this.storage.remove('usuario');
    }

    exist() {
        this.get().then(res => {
            console.log('resultado >>> ', res);
            if(res) {
                console.log('resultado IF');
                return true;
            } else {
                console.log('resultado else');
                return false;
            }
        });
    }
}

我的用户/ Usuario类:

import { Model } from './../models/model';

export class Usuario extends Model{
    nome: string;
    email: string;
    login: string;
    senha: string;
} 

模型类

import { Usuario } from './../interface/usuario'; 

export class Model{ 
    constructor(Usuario){ 
        Object.assign(this, Usuario); 
    } 
} 

我在哪里获取存储在Usuario对象中的内容,并在之后立即记录

ionViewDidLoad() {
  this.carregarPerfil();
  this.session.get()
    .then(res => {
      this.usuarioLogado = new Usuario(res);
      console.log('usuário logado  >>> ', this.usuarioLogado);
    });

  console.log(this.session.exist());

  this.session.remove();

  this.session.get()
    .then(res => {
      this.usuarioLogado = new Usuario(res);
      console.log('USUARIO LOGADO  >>> ', this.usuarioLogado);
    });

  console.log(this.session.exist());
}

编辑:这是当我在console.log内使用storage.get

创建时发生的情况
https://imgur.com/a/W2rQhd8

    create(usuario: Usuario) {
        this.storage.set('usuario', usuario);
        console.log('[TEST] VALUE BEING PASSED IS ', this.storage.get('usuario'));
    }

1 个答案:

答案 0 :(得分:1)

这是怎么回事:

  • 在login.ts中,您具有以下行:this.usuario = new Usuario('nome');
  • Usuario从Model继承。
  • 模型使用构造函数中的参数调用object.assign()来设置自己的参数。
  • 字符串本质上是一个数组。
  • 因此,通过调用object.assign(this, 'nome'),您将创建与字符串中的每个索引相对应的参数,并将值作为每个字符。

很显然,您希望在此行上做一些不同的事情,例如将item传递到构造函数中。但是,我认为object.assign业务正在遇到麻烦,因此您应该更加明确地反序列化结果。

export class Usuario {
    nome: string;
    email: string;
    login: string;
    senha: string;

    constructor(src: any) {
        if (src) {
            this.nome = src['nome'] || undefined;
            this.email = src['email'] || undefined;
            this.login = src['login'] || undefined;
            this.senha = src['senha'] || undefined;
        }
    }
}