angular 2 订阅 observable 未定义
angular 2 subscribe to observable getting undefined
我在 angular 2 应用程序中有一个服务和一个组件,我在服务中得到响应并且也能够登录到控制台,但它在组件中显示未定义。我在这里做什么错了?谁能指出错误。
提前致谢
服务:
import { Injectable } from '@angular/core'
import { Http, Response,Headers } from '@angular/http'
import { Observable } from 'rxjs/Observable'
import "rxjs/add/operator/map"
import "rxjs/add/operator/catch"
import "rxjs/add/Observable/throw"
@Injectable()
export class LoginService {
public logResult;
private _url = "http://localhost:53798/api/Login?uname=abcd&pass=1"
constructor(private _http: Http) { }
getEmployees(userID:string,passWord:string) : Observable<boolean>{
return this._http.get(this._url).map((response: Response) =>
{
let logResult= response.json();
logResult.forEach(re=>{
if(re.LoginResult=="Success")
{
console.log('Success');//this is being written to console
return<boolean> true;
}
else{
console.log('fail');
return<boolean> false;
}
})
}).catch(this._errorHandler);
}
_errorHandler(error: Response) {
console.log(error);
return Observable.throw(error || "Server not Found")
}
}
组件:
ValidateLogin(){
this._loginService.getEmployees(this.loginForm.value.UserId,this.loginForm.value.password)
.subscribe(resLoginData => {
console.log(resLoginData);//resLoginData is undefined
if(resLoginData===true)
{
console.log('Success');
this.router.navigateByUrl('/Home');}
else{
console.log('Fail');
this.router.navigateByUrl('/Login');
}
resLoginError => this.errorMsg = resLoginError})
}
}
你有没有在你的应用中安装 rxjs 和 zone-js
import { Injectable } from "@angular/core";
import { Http, Response, Headers, RequestOptions, URLSearchParams } from "@angular/http";
import { Observable } from "rxjs/Observable";
import "rxjs/Rx";
@Injectable()
export class LoginService {
public logResult;
private _url = "http://localhost:53798/api/Login?uname=abcd&pass=1"
constructor(private _http: Http) { }
getEmployees(userID:string,passWord:string) : Observable<boolean>{
return this._http.get(this._url).map((response: Response) =>
{
let logResult= response.json();
logResult.forEach(re=>{
if(re.LoginResult=="Success")
{
console.log('Success');//this is being written to console
return true;
}
else{
console.log('fail');
return false;
}
})
}).catch(this._errorHandler);
}
_errorHandler(error: Response) {
console.log(error);
return Observable.throw(error || "Server not Found")
}
}
forEach
块不会在 return
语句处停止。
let logResult= response.json().data;
let result = false;
logResult.forEach(re=>{
if(re.LoginResult=="Success")
{
// console.log('Success');//this is being written to console
result = true;
}
else{
// console.log('fail');
result false;
}
});
return result; // return the true result out of forEach.
您还应该将 let logResult= response.json();
更改为 let logResult= response.json().data;
,因为 http 的方法将 return 数据这样处理。
我在 angular 2 应用程序中有一个服务和一个组件,我在服务中得到响应并且也能够登录到控制台,但它在组件中显示未定义。我在这里做什么错了?谁能指出错误。 提前致谢
服务:
import { Injectable } from '@angular/core'
import { Http, Response,Headers } from '@angular/http'
import { Observable } from 'rxjs/Observable'
import "rxjs/add/operator/map"
import "rxjs/add/operator/catch"
import "rxjs/add/Observable/throw"
@Injectable()
export class LoginService {
public logResult;
private _url = "http://localhost:53798/api/Login?uname=abcd&pass=1"
constructor(private _http: Http) { }
getEmployees(userID:string,passWord:string) : Observable<boolean>{
return this._http.get(this._url).map((response: Response) =>
{
let logResult= response.json();
logResult.forEach(re=>{
if(re.LoginResult=="Success")
{
console.log('Success');//this is being written to console
return<boolean> true;
}
else{
console.log('fail');
return<boolean> false;
}
})
}).catch(this._errorHandler);
}
_errorHandler(error: Response) {
console.log(error);
return Observable.throw(error || "Server not Found")
}
}
组件:
ValidateLogin(){
this._loginService.getEmployees(this.loginForm.value.UserId,this.loginForm.value.password)
.subscribe(resLoginData => {
console.log(resLoginData);//resLoginData is undefined
if(resLoginData===true)
{
console.log('Success');
this.router.navigateByUrl('/Home');}
else{
console.log('Fail');
this.router.navigateByUrl('/Login');
}
resLoginError => this.errorMsg = resLoginError})
}
}
你有没有在你的应用中安装 rxjs 和 zone-js
import { Injectable } from "@angular/core";
import { Http, Response, Headers, RequestOptions, URLSearchParams } from "@angular/http";
import { Observable } from "rxjs/Observable";
import "rxjs/Rx";
@Injectable()
export class LoginService {
public logResult;
private _url = "http://localhost:53798/api/Login?uname=abcd&pass=1"
constructor(private _http: Http) { }
getEmployees(userID:string,passWord:string) : Observable<boolean>{
return this._http.get(this._url).map((response: Response) =>
{
let logResult= response.json();
logResult.forEach(re=>{
if(re.LoginResult=="Success")
{
console.log('Success');//this is being written to console
return true;
}
else{
console.log('fail');
return false;
}
})
}).catch(this._errorHandler);
}
_errorHandler(error: Response) {
console.log(error);
return Observable.throw(error || "Server not Found")
}
}
forEach
块不会在 return
语句处停止。
let logResult= response.json().data;
let result = false;
logResult.forEach(re=>{
if(re.LoginResult=="Success")
{
// console.log('Success');//this is being written to console
result = true;
}
else{
// console.log('fail');
result false;
}
});
return result; // return the true result out of forEach.
您还应该将 let logResult= response.json();
更改为 let logResult= response.json().data;
,因为 http 的方法将 return 数据这样处理。