2016-08-24 18 views
23

tôi cố gắng làm theo hướng dẫn trên angular.io (Tour the Heroes) Nhưng thay vì hướng dẫn, tôi cố gắng thực hiện yêu cầu GET thực trên một số JSON .Angular2 - TypeError: this.http.get (...). ToPromise không phải là hàm

Mã của tôi trông giống như:

private userUrl = 'https://jsonplaceholder.typicode.com/users'; 
    constructor(private http: Http) {} 

    getUsersHttp(): Promise<User[]> { 
    return this.http.get(this.userUrl) 
     .toPromise() 
     .then(response => response.json().data as User[]) 
     .catch(this.handleError); 
    } 

Để phục vụ tôi nhập khẩu chỉ vài điều cơ bản:

import { Injectable }  from '@angular/core'; 
import { Headers, Http, Response } from '@angular/http'; 
import { User } from './user'; 

đâu user.ts là bản sao về cơ bản của heroe.ts trong TOH vậy:

export class User { 
    id: number; 
    name: string; 
} 

Cách tôi gọi phương thức cụ thể này trong dịch vụ: Trước tiên Tôi thử nhiều thứ nhưng khi gỡ lỗi tôi cố gắng chỉ console.log nó vậy:

console.log(this.userService.getUsersHttp()); 

Khi trang web được tải trong giao diện điều khiển tôi tìm thấy nhiều lỗi: Đầu tiên là:

EXCEPTION: TypeError: this.http.get(...).toPromise is not a function

một thứ hai là:

EXCEPTION: TypeError: this.http.get(...).toPromise is not a functionBrowserDomAdapter.logError @

Tự động dịch vụ có vẻ ổn. Tôi thêm dịch vụ của tôi để app.module.ts trong dòng này:

providers: [ HTTP_PROVIDERS, UserService ] 

và nó hoạt động nếu tôi trực tiếp trả lại dữ liệu với một số chức năng tương tự (và nhận xét ra gọi getUsertHttp chức năng):

getUsers() { 
    return [{'id': 1, 'name': 'User1'}, {'id': 2, 'name': 'User2'}]; 
    } 

tôi cố gắng để mô tả tất cả mọi thứ có thể rất quan trọng vì vậy xin lỗi nếu câu hỏi là loại dài một chút. Xin vui lòng các bạn có thể cho tôi gợi ý những gì tôi đang làm sai?

+0

Bạn có thể cũng dán index.html và main.ts? Có thể thiếu lõi-js hoặc es6-shim trong polyfill. –

Trả lời

75

Hình như bạn đang thiếu nhập khẩu:

import 'rxjs/add/operator/toPromise';

+0

Xin chào @Stefan Svrkota, bạn đã đúng, tôi đã bỏ lỡ việc nhập đó. Tôi sẽ đánh dấu câu hỏi của bạn là chính xác anyway nhưng có lẽ bất kỳ gợi ý tại sao 'this.httpUsers' là undifined? 'this.userService .getUsersHttp() . Sau đó (người dùng => this.httpUsers = người dùng) .catch (error => this.error = error);' – Andurit

+2

https://jsonplaceholder.typicode.com/users trả về một mảng json, không phải đối tượng có thành viên .data –

+0

Cảm ơn cả hai, Philippe đã đúng về điều này, – Andurit

Các vấn đề liên quan