Я прочитал этот урок https://angular.io/docs/ts/latest/tutorial/toh-pt6.html. Я решил построить нечто совершенно похожее, но для поддержки билетов вместо heros.Застрял в модуле httpModule и Promise
У меня есть TicketService
, который получает JSON из файла php.
Код Услуги по продаже билетов, просто это
export class TicketService {
private headers = new Headers({'Content-Type': 'application/json'});
private ticketsUrl = 'http://localhost/json.php'; // URL to web api
// constructor so that we can get instance of http
constructor(private http: Http) { }
getTickets() : Promise<Ticket[]> {
return this.http.get(this.ticketsUrl)
.toPromise()
.then(response => response.json().data as Ticket[])
.catch(this.handleError)
}
getTicket(id: number): Promise<Ticket> {
console.log('TicketService getTicket() called: TicketID '+id);
const url = `${this.ticketsUrl}?${id}`;
return this.http.get(url)
.toPromise()
.then(response => response.json().data as Ticket)
.catch(this.handleError);
}
Мои TicketSystemComponent называет услугу, чтобы получить билеты. Но даже если я печатаю билеты в консоли они не определены
export class TicketSystemComponent implements OnInit {
// declare and initialise to empty array
tickets : Ticket[] = [];
// This is the only way to get instance of the service
// https://angular.io/docs/ts/latest/tutorial/toh-pt4.html [Dependency Injection]
constructor(private ticketService: TicketService) {
}
getTickets() : void {
console.log('TicketSystemComponent get getTicket()');
// This line tells that once Service Promise is fullfilled, assigned their tickets to our tickets array
this.ticketService.getTickets().then(tickets => this.tickets = tickets);
setTimeout (function() {
console.log(this.tickets);
}, 1000);
}
ngOnInit() {
// We dont call anything slow in constructor. Constructor is not for heavy lifting
// Get tickets that are already created
this.getTickets();
}
}
Пожалуйста, проверьте setTimeout()
, она до сих пор неопределенную. Я не знаю, где я поступаю неправильно.
JSON выход из PHP просто это
[{"category":"Script Support","topic":"Sample Topic 1","url":"http:\/\/www.google.com","details":"the quick brown fox jumps over the lazy dog.","fileScreenshot":"none","ticketId":1000,"createdBy":"John"},{"category":"Script Support","topic":"Sample Topic 2","url":"http:\/\/www.google.com","details":"the quick brown fox jumps over the lazy dog.","fileScreenshot":"none","ticketId":1001,"createdBy":"John"},{"category":"Script Support","topic":"Sample Topic 3","url":"http:\/\/www.google.com","details":"the quick brown fox jumps over the lazy dog.","fileScreenshot":"none","ticketId":1002,"createdBy":"John"}]
Мой Ticket
класс очень просто. Это код
export class Ticket {
category :String;
topic :String;
url :String;
details :String;
fileScreenshot :String;
ticketStamp :number;
ticketId :number;
createdBy :String;
}
Почему вы используете обещания здесь ?? –
Пример учебника по угловым.io использовал обещания. В учебнике сказано, что если вы используете любой HTTP-запрос, вы должны использовать обещание, чтобы оно было асинхронным и не блокировало ваш пользовательский интерфейс. Что лучше? – Sallu
Не доверяйте учебникам :) проверьте мой ответ –