angular6 - 调用服务以响应同一服务的回调
angular6 - call a service in response callback of same service
问题如题。当我在同一服务的响应回调下第二次调用服务时显示 this error.
app.component.ts代码:
import { Component, OnInit } from '@angular/core';
import { User } from './models/user';
import { UserService } from './services/user.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
providers: [ UserService ]
})
export class AppComponent implements OnInit{
public pageTitle = 'Portal de producción científica';
public user: User;
public identity;
public token;
public errorMessage;
constructor(
private _userService: UserService
){
this.user = new User('', '', '', '', '', '', '','ROLE_ACADEMIC','','','','');
}
/**
* ngOnInit
*/
public ngOnInit() {}
/**
* onSubmit
*/
public onSubmit() {
this._userService.signup(this.user).subscribe(
response => {
let identity = response.user;
this.identity = identity;
if(!this.identity._id){
alert("EL usuario no esta correctamente logeado.");
} else{
console.log(this);
this._userService.signup(this.user, 'true').subscribe(
response => {
let token = response.token;
this.token = token;
if (this.token.length <= 0) {
alert("EL token no se ha generado.");
} else {
console.log(token);
console.log(identity);
}
},
error => {
var errorMessage = <any>error;
if (errorMessage != null) {
var body = JSON.parse(error._body);
this.errorMessage = body.message;
console.log(errorMessage);
}
}
);
}
},
error => {
var errorMessage = <any>error;
if(errorMessage != null){
var body = JSON.parse(error._body);
this.errorMessage = body.message;
console.log(errorMessage);
}
}
);
}
}
user.service.ts代码:
import { Injectable } from '@angular/core';
import { Http, Response, Headers } from '@angular/http';
import { map } from 'rxjs/operators';
import { Observable } from 'rxjs/Observable';
import { GLOBAL } from './global';
@Injectable()
export class UserService {
public url: String;
constructor(private _http: Http) {
this.url = GLOBAL.url;
}
/**
* signup
*/
public signup(user_to_login, gethash = null) {
if (gethash != null) {
user_to_login.gethash = gethash;
} else {
let json = JSON.stringify(user_to_login);
let params = json;
let headers = new Headers({ 'Content-Type': 'application/json' });
return this._http.post(this.url + 'login', params, { headers: headers }).pipe(map(res => res.json()));
}
}
}
服务功能注册中的想法是当 gethash 参数为真时,API returns 令牌将其保存在 localStorage 中。
非常感谢任何帮助:)
PS1:我正在关注 Udemy 的 this 教程。
PS2: 我试图声明一个 var self = this,但是没有用。
最后我留下的代码是这样的:
app.component.html:
public onSubmit() {
this._userService.signup(this.user).subscribe(
response => {
let identity = response.user;
this.identity = identity;
if(!this.identity._id){
alert("EL usuario no esta correctamente logeado.");
} else{
this._userService.signup(this.user, 'true').subscribe(
response => {
let token = response.token;
this.token = token;
if (this.token.length <= 0) {
alert("EL token no se ha generado.");
} else {
console.log(this.token);
console.log(this.identity);
}
},
error => {
var errorMessage = <any>error;
if (errorMessage != null) {
var body = JSON.parse(error._body);
this.errorMessage = body.message;
console.log(errorMessage);
}
}
);
}
},
error => {
var errorMessage = <any>error;
if(errorMessage != null){
var body = JSON.parse(error._body);
this.errorMessage = body.message;
console.log(errorMessage);
}
}
);
}
user.service.ts:
public signup(user_to_login, gethash = null) {
if (gethash != null) {
user_to_login.getHash = gethash;
let json = JSON.stringify(user_to_login);
let params = json;
let headers = new Headers({ 'Content-Type': 'application/json' });
return this._http.post(this.url + 'login', params, { headers: headers }).pipe(map(res => res.json()));
} else {
let json = JSON.stringify(user_to_login);
let params = json;
let headers = new Headers({ 'Content-Type': 'application/json' });
return this._http.post(this.url + 'login', params, { headers: headers }).pipe(map(res => res.json()));
}
}
感谢JB Nizet的建议。
问题如题。当我在同一服务的响应回调下第二次调用服务时显示 this error.
app.component.ts代码:
import { Component, OnInit } from '@angular/core';
import { User } from './models/user';
import { UserService } from './services/user.service';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
providers: [ UserService ]
})
export class AppComponent implements OnInit{
public pageTitle = 'Portal de producción científica';
public user: User;
public identity;
public token;
public errorMessage;
constructor(
private _userService: UserService
){
this.user = new User('', '', '', '', '', '', '','ROLE_ACADEMIC','','','','');
}
/**
* ngOnInit
*/
public ngOnInit() {}
/**
* onSubmit
*/
public onSubmit() {
this._userService.signup(this.user).subscribe(
response => {
let identity = response.user;
this.identity = identity;
if(!this.identity._id){
alert("EL usuario no esta correctamente logeado.");
} else{
console.log(this);
this._userService.signup(this.user, 'true').subscribe(
response => {
let token = response.token;
this.token = token;
if (this.token.length <= 0) {
alert("EL token no se ha generado.");
} else {
console.log(token);
console.log(identity);
}
},
error => {
var errorMessage = <any>error;
if (errorMessage != null) {
var body = JSON.parse(error._body);
this.errorMessage = body.message;
console.log(errorMessage);
}
}
);
}
},
error => {
var errorMessage = <any>error;
if(errorMessage != null){
var body = JSON.parse(error._body);
this.errorMessage = body.message;
console.log(errorMessage);
}
}
);
}
}
user.service.ts代码:
import { Injectable } from '@angular/core';
import { Http, Response, Headers } from '@angular/http';
import { map } from 'rxjs/operators';
import { Observable } from 'rxjs/Observable';
import { GLOBAL } from './global';
@Injectable()
export class UserService {
public url: String;
constructor(private _http: Http) {
this.url = GLOBAL.url;
}
/**
* signup
*/
public signup(user_to_login, gethash = null) {
if (gethash != null) {
user_to_login.gethash = gethash;
} else {
let json = JSON.stringify(user_to_login);
let params = json;
let headers = new Headers({ 'Content-Type': 'application/json' });
return this._http.post(this.url + 'login', params, { headers: headers }).pipe(map(res => res.json()));
}
}
}
服务功能注册中的想法是当 gethash 参数为真时,API returns 令牌将其保存在 localStorage 中。
非常感谢任何帮助:)
PS1:我正在关注 Udemy 的 this 教程。 PS2: 我试图声明一个 var self = this,但是没有用。
最后我留下的代码是这样的:
app.component.html:
public onSubmit() {
this._userService.signup(this.user).subscribe(
response => {
let identity = response.user;
this.identity = identity;
if(!this.identity._id){
alert("EL usuario no esta correctamente logeado.");
} else{
this._userService.signup(this.user, 'true').subscribe(
response => {
let token = response.token;
this.token = token;
if (this.token.length <= 0) {
alert("EL token no se ha generado.");
} else {
console.log(this.token);
console.log(this.identity);
}
},
error => {
var errorMessage = <any>error;
if (errorMessage != null) {
var body = JSON.parse(error._body);
this.errorMessage = body.message;
console.log(errorMessage);
}
}
);
}
},
error => {
var errorMessage = <any>error;
if(errorMessage != null){
var body = JSON.parse(error._body);
this.errorMessage = body.message;
console.log(errorMessage);
}
}
);
}
user.service.ts:
public signup(user_to_login, gethash = null) {
if (gethash != null) {
user_to_login.getHash = gethash;
let json = JSON.stringify(user_to_login);
let params = json;
let headers = new Headers({ 'Content-Type': 'application/json' });
return this._http.post(this.url + 'login', params, { headers: headers }).pipe(map(res => res.json()));
} else {
let json = JSON.stringify(user_to_login);
let params = json;
let headers = new Headers({ 'Content-Type': 'application/json' });
return this._http.post(this.url + 'login', params, { headers: headers }).pipe(map(res => res.json()));
}
}
感谢JB Nizet的建议。