【问题标题】:Session value returns null when checking whats stored检查存储的内容时,会话值返回 null
【发布时间】:2018-10-08 23:11:35
【问题描述】:

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

我不明白为什么它会像'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());
}

编辑:这是我在使用 storage.get 创建 console.log 时发生的情况

https://imgur.com/a/W2rQhd8

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

【问题讨论】:

  • 调试运行时create传入的对象!或发布Model 类以及您如何设置对象!
  • 请创建Minimalist StackBlitz 复制此问题。
  • @Ravikumar 这是我的模型类: import { Usuario } from './../interface/usuario';导出类模型{构造函数(Usuario){ Object.assign(this,Usuario); } }
  • @SiddAjmera 请发布您如何设置对象!
  • 抱歉耽搁了@SiddAjmera,这是代码stackblitz.com/edit/ionic-6jcigi?file=pages%2Flogin%2Flogin.ts

标签: angular typescript session ionic-framework


【解决方案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;
        }
    }
}

【讨论】:

  • src 的上下文是什么?我很抱歉,但我不明白你的代码是做什么的
  • src 是您传递给构造函数的对象。当您在示例中调用 this.usuarioLogado = new Usuario(res); 时,res 将是 src
  • 您正在显示 Promise 对象。你需要做this.storage.get('usuario').then(x =&gt; console.log(x))
猜你喜欢
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 2013-07-24
  • 2015-10-11
  • 2019-06-08
  • 2017-07-03
相关资源
最近更新 更多