#angular #angular2-services
#angular #angular2-сервисы
Вопрос:
Я новичок в Angular2. Я сослался на руководство Hero, приведенное на официальном веб-сайте, и написал следующий код для HTTP post-запроса в Angular2 в соответствии с моим требованием. Я привык к java-скрипту и использую вызовы AJAX для взаимодействия с веб-сервером, в вызове javascript-AJAX мы можем выполнить некоторую функцию при успешном вызове AJAX (функция обратного вызова). Как мне добиться этого в angular2? я также хочу использовать оповещения. При успешном / неудачном выполнении каждого вызова отображается окно с предупреждением о его успехе или неудаче.
@Injectable()
export class LicenceService {
constructor(private http: Http) {}
private headers = new Headers({'Content-Type': 'application/json'});
/* URL to web api*/
private licenceUrl = 'http://localhost:5000/***/****/installation/uploadLicense';
sendData(key: string){
return this.http
.post(this.licenceUrl, key, this.headers)
.toPromise()
.then(res => res.json().data)
.catch(this.handleError);
}
private static handleError (error: any) {
console.log(error);
return Promise.reject(error.json());
}
Ответ №1:
Все, что вам нужно, уже есть в вашем коде
sendData(key: string){
return this.http
.post(this.licenceUrl, key, this.headers)
.toPromise()
.then(res => {
res.json().data;
// code here is executed on success
})
.catch(this.handleError);
}
или для вызывающего
this.sendData(somekey).then(result => /*put after after success code here */);
Комментарии:
1. Спасибо. Это было очень полезно. Я подробно и снова прочитал документы Angular и прояснил свои сомнения. Службы и раздел HTTP решили мою проблему.
Ответ №2:
Хотя на ваш вопрос уже дан ответ, вот еще один подход, который разделяет логику обслуживания и обратного вызова. Я добился этого с помощью subscibe и Observable
Вот мой вопрос.compnent.ts
ngOnInit() {
this.getQuestions();
}
getQuestions() {
this.yourService.getQuestions()
.subscribe(
data => this.displayData = data,
error => this.errorMessage = <any>error,
() => {
//this gets called on completion, callback code comes here
}
);
}
И мой вопрос.service.ts, который обрабатывает часть HTTP-запросов
getQuestions(): Observable<DisplayData[]>{
const endPoint = 'http://localhost:3000/yourApi';
return this.http.get(endPoint).map((response: Response) => response.json());
}
Примечание: this.displayData — это переменная типа displayData[], которая используется в качестве наблюдаемой в службе.
Извините за длинный пост. Приветствия 🙂