Возможно, у меня есть что-то очень очевидное, но то, что я пытаюсь сделать, это обмениваться данными, которые я получаю с сервера асинхронно между компонентами.Совместное использование данных async в сервисе angular2
Это то, что моя служба выглядит следующим образом:
import {Injectable} from 'angular2/core';
import {ApiService} from './api.service';
@Injectable()
export class UserService {
private user: Object
constructor(private _api: ApiService) {}
getUser(user) {
return this.user
}
setUser(slug) {
return Promise.resolve(this._api.GET('users/' + slug + '/?slug=true').subscribe(
data => { this.user = data.json; return data.json; },
(err)=>console.log(err)
))
}
}
Поскольку процесс является асинхронным мне нужно Обещайте ответ, однако обещанный ответ возвращает фактические подписываться объект, а не возвращенная data.json
.
Это страница профиля, состоящая из вложенных маршрутов, поэтому я не могу передать данные маршрутизируемым компонентам. Одним из маршрутизированных компонентов является «Сообщения», и после загрузки профиля это должно начинать прием сообщений ТЕКУЩЕГО ПОЛЬЗОВАТЕЛЯ В СЕРВИСЕ.
Так это то, что мне нужно случиться:
- Пользователь переходит к его/ее профиль.
- Сервисные вызовы setUser ('foo'), после ответа, показать страницу профиля.
- Fetch пост пользователя в компонент сообщений с помощью GetUser сервиса()
Служба апи выглядит следующим образом:
import {Injectable} from 'angular2/core';
import {Http, Response, RequestOptions, Headers, Request, RequestMethod} from 'angular2/http';
import {GlobalService} from '../app.service';
import 'rxjs/Rx';
@Injectable()
export class ApiService {
constructor(private http: Http) {}
apiURL = 'http://localhost:8000/api/';
assetURL = 'http://localhost:8000/media/';
GET(url) {
var headers = new Headers(), authtoken = localStorage.getItem('authtoken');
headers.append("Content-Type", 'application/json');
if (authtoken) {
headers.append("Authorization", 'Token ' + authtoken)
}
headers.append("Accept", 'application/json');
var requestoptions = new RequestOptions({
method: RequestMethod.Get,
url: this.apiURL + url,
headers: headers
})
return this.http.request(new Request(requestoptions))
.map((res: Response) => {
if (res) {
return { status: res.status, json: res.json() }
}
});
}
}
Оправдание бедный вопрос, если он был, я все еще учусь angular2 и не смог найти конкретного решения для этого онлайн.
Что такое 'Promise' для возврата из' setUser() '? –
@ GünterZöchbauer Если вы ссылаетесь на мой предыдущий вопрос, на который вы ответили, то для компонента «Профиль» после обещания компонент профиля загружает страницу профиля для пользователя. И тогда любые дочерние компоненты могут использовать getUser для извлечения пользователя, установленного сервисом. –
Не могли бы вы разместить ссылку, я не помню. –