【问题标题】:How to get the result from provider如何从提供者那里获得结果
【发布时间】:2018-06-15 11:01:16
【问题描述】:

我正在研究离子应用程序中的身份验证部分。移动应用程序连接到包含登录功能并返回用户文凭列表的 Spring Boot 应用程序。 我将在移动应用程序中使用此信息,因此我必须检查提供程序函数是否返回一个不为空的列表。 提供程序功能完美运行,但我不知道如何在组件中返回列表。 这是 loginProvider:

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';

@Injectable()
export class LoginProvider {

  constructor(public http: HttpClient) { }

  public url = "http://localhost:8080/";

  login(user: any) {
    return this.http.post(this.url+'user/loginEmp',user)
        .subscribe((res: Response ) => console.log(res));
    }
}

这是登录页面:

import { Component } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { IonicPage, NavController, NavParams } from 'ionic-angular';
import { TabsPage } from '../tabs/tabs';
import { Md5 } from 'ts-md5/dist/md5';
import { LoginProvider } from '../../providers/login/login';
import 'rxjs/add/operator/toPromise';


@IonicPage()
@Component({
  selector: 'page-login',
  templateUrl: 'login.html',
})
export class LoginPage {

  authForm: FormGroup;
  showError: boolean = false;
  loginError: string;

  constructor(public nav: NavController,
              public navParams: NavParams, 
              public formBuilder: FormBuilder,
              private loginProvider : LoginProvider) {

      this.authForm = formBuilder.group({
        'email': ['', Validators.compose([Validators.required,Validators.email])],
        'password': ['', Validators.compose([Validators.required, Validators.minLength(6)])]
      });
  }

  onSubmit(login:any) {
    let user: any = {
      "email": login['email'].trim(),
      "password" : Md5.hashStr(login['password']).toString()
    };
    this.loginProvider.login(user).subscribe((response)=> {
      console.log(response)
      if(!this.isEmpty(response)){
          sessionStorage.setItem("CurrentUser", JSON.stringify(response));
          this.nav.push(TabsPage);   
      }else{
          this.showError = true;
      }
    });
  }
  // this function return true if the object in argument is empty
  isEmpty(obj) {
    for(var key in obj) {
        if(obj.hasOwnProperty(key))
            return false;
    }
    return true;
  }
}

在控制台中我得到了列表,但“console.log(response)”显示“未定义”

【问题讨论】:

    标签: typescript ionic-framework


    【解决方案1】:

    您似乎正在从Observable 返回一个已在Provider 中订阅的结果

    我正在研究离子应用程序中的身份验证部分。移动应用程序连接到包含登录功能的 Spring Boot 应用程序并返回用户的文凭列表。我将在移动应用程序中使用此信息,因此我必须检查提供程序函数返回的列表是否为空。提供程序功能完美运行,但我不知道如何在组件中返回列表。这是登录提供者。将您的 login() 方法更改为如下所示。

      login(user: any) {
        return this.http.post(this.url+'user/loginEmp',user)
    
        }
    

    【讨论】:

      【解决方案2】:

      更改您的登录提供商使用地图而不是使用两次订阅

      login(user: any) {
          return this.http.post(this.url+'user/loginEmp',user)
              .map(res => res.json());
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-05
        • 2016-01-06
        • 1970-01-01
        • 2022-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多