2017-11-09 6 views
2

Httpを使用して既存のアプリケーションをHttpClientに変更しようとしていますが、エラーがあります。角4 - HttpClientへのHttp - プロパティ 'someproperty'がオブジェクトに存在しません

だから私のサービスに今あなたがコメントアウトされています古いコード対新しいコードを参照することができます

constructor(
     // private http: Http 
     private http: HttpClient 
    ) { } 

    getSidebar() { 
     // return this.http.get('http://localhost:3000/sidebar/edit-sidebar') 
     //  .map(res => res.json()); 
     return this.http.get('http://localhost:3000/sidebar/edit-sidebar'); 
    } 

そして、私のpage.component.tsに私は上記の行のためしかし、この

this.sidebarService.getSidebar().subscribe(sidebar => { 
         this.sidebar = sidebar.content; // this does not work now 
        }); 

を持っているが私がコメントしたこのエラーは、今このエラーが発生します:

Property 'content' 
does not exist on type 'Object'. 

ただし、もし私がconsole.log(sidebar)私は次のようになります:

{_id: "59dde326c7590a27a033fdec", content: "<h1>sidebar here</h1>"} 

何が問題なのですか?

再び、Httpが機能しますが、HttpClientはありません。

+0

この リターンthis.http.getを( 'のhttp:// localhostを:3000 /サイドバー/編集サイドバー')してみてください の.map(RES => RES); –

+0

まだ同じですが、とにかく私はhttpclientを使うと地図が冗長だと思います。 –

答えて

8

あなたが例えばインタフェース、クラス、などを使用して、返されるタイプを指定することができ、次のようなものを使用することができます例として

return this.http.get<Sidebar>('http://localhost:3000/sidebar/edit-sidebar'); 

を、サイドバーは以下のように定義されることがあります。

interface Sidebar { 
    _id: string; 
    content: string; 
} 

更なる情報については、アンギュラドキュメントからTypechecking the responseを参照してください:

...活字体をHTTPから戻ってくるオブジェクトにresultsプロパティがないことを正しく告げるでしょう。これは、HttpClientがJSONレスポンスをObjectとして解析していたときに、そのオブジェクトの形状がわからないためです。

+0

''と言わなかった場合は、デフォルトの戻り値の型として 'any'をとります。 –

4

代替ソリューション:

this.sidebar = sidebar["content"]; 

自動的にオブジェクトとそのオブジェクトの形状にJSON応答はそれがこのエラー理由活字体のショーだ、知られていないのHttpClient、HttpClientを解析して値を返します

0

ご購読方法にインターフェースのサイドバーを追加しよう:

this.sidebarService.getSidebar().subscribe((sidebar: Sidebar) => { 
    this.sidebar = sidebar.content; 
}); 

interface Sidebar { 
    _id?: string; 
    content?: string; 
} 
1

ますC変数(サイドバー)にインタフェースを割り当てて、明示的にその変数を取得または割り当てて、コンパイル時エラーが発生しないようにします。

this.sidebarService.getSidebar().subscribe((sidebar: any) => { 
         this.sidebar = sidebar.content; 
        }); 
関連する問題