У меня есть страница и служба в угловых 2.Угловых 2 HTTP многих абонентов
Когда я вызвать функцию службы this.Auth.login()
, он делает запрос HTTP POST. Моя проблема заключается в том, что как только запрос возвращает данные, я хочу работать с этими данными в сервисе И на странице.
Я пробовал все виды вещей, но не мог понять, как это сделать.
Я знаю, что мой код не может работать так, потому что прямо сейчас this.Auth.login()
возвращает объект подписчика. Если я удалю «.subscribe()» в службе, он будет работать на странице. Но это не то, что мне нужно.
Я также попытался вернуть обещание, но не смог заставить его работать.
Кто-нибудь знает, как я могу достичь данных из http.post
в обоих контроллерах и работать с ним, как только запрос будет завершен?
Вот мой код
Страница:
import {AuthService} from '../auth/auth.service';
@Page({
templateUrl: 'build/pages/signin/signin.html'
})
export class Signin {
constructor(app: IonicApp, auth: AuthService){
this.Auth = auth;
}
signIn = function() {
this.Auth.login(this.user.email, this.user.password)
.subscribe(data => {do some stuff here});
// maybe a promise with .then can solve this
};
}
Услуги:
import {Http, Headers} from 'angular2/http';
import {Injectable} from 'angular2/core';
@Injectable()
export class AuthService {
private http;
constructor(http:Http) {
this.http = http;
}
login(email, password) {
let headers = new Headers();
headers.append('Content-Type', 'application/json');
// maybe i need to return this as a promise
return this.http.post('http://localhost:9000/auth/local', JSON.stringify({
email: email,
password: password
}), {
headers: headers
})
.subscribe(data => {
do some stuff here too with the data
));
// i tried to add .toPromise() but that didn't work
}
}
я ушел из других строк кода, поэтому могут быть некоторые зависимости отсутствуют. Это все хорошо.
Я попробовал и я получаю ошибку 'this.http.post (.. .). map не является функцией'. –
добавить импорт 'rxjs/add/operator/map'; в AuthService – Abdulrahman
Правильно ли сказать, что обратный вызов 'map' не будет выполнен, если только что-то не вызывает' subscribe() '(в этом случае показан сервис)? Если это так, то об этом следует знать, если вы полагаетесь на что-то делать с данными независимо от того, вызывает ли вызывающий код 'subscribe()' на наблюдаемом. – GregL