質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

3回答

7143閲覧

rxjs(Observable)の値の受け渡し

ppp0

総合スコア6

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2018/06/26 04:20

編集2018/08/03 10:31

前提・実現したいこと

APIからgetしたデータをAngularで表示させたいと思っています。
ですが、rxjsのObservableの値の受け渡しがよくわからず、実現できません。
ご教示いただければ、幸いです。

発生している問題・エラーメッセージ

ERROR in src/app/table/table-datasource.ts(89,1): error TS2322: Type 'Subscription' is not assignable to type 'TableItem[]'. Property 'includes' is missing in type 'Subscription'.

該当のソースコード

呼び出し先

public httpGetHuman(apitoken: string): Observable<any> { const options = { headers: { Authorization: apitoken } }; return this.http.get(this.Url, options); }

呼び出し元

Typescript

1export interface TableItem { 2 id: number; 3 name: string; 4} 5 6public getdata() { 7 return this.httpGetHuman(apitoken).subscribe(data => this.data['body'] = data); 8} 9 10data: TableItem[] = this.getdata();

直したいところ

dataオブジェクトにHttpGetしたデータを埋め込みたいのですが、
データの参照の仕方がわからず困っています。

補足情報

HttpのGetリクエストのbodyは以下です。

[ {id: 1, name: 'aaa'}, {id: 2, name: 'bbb'}, {id: 3, name: 'ccc'}, {id: 4, name: 'ddd'} ]

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

xenbeat

2018/06/26 06:12

エラー的にJSの実行時エラーではなくTypeScriptのコンパイル時エラーです。構文が間違っているので、ソースコードを変に省略・加工せずにファイル単位で質問本文に追記ください。ざっと見ただけでも呼び出し先のhttpGetHumanがどこにも出てきません。
xenbeat

2018/06/26 06:33 編集

メソッド名だけ修正されたようですが、ソースコードを省略せず全体を追記ください。コンストラクタで設定されているであろう変数がいきなり出てきたり、回答者が色々空気を読まないといけないので負担が大きいです。
teikoku-penguin

2018/11/20 02:25

xxx.component.html xxx.component.ts xxx.component.css など関係してくる部分ファイル名込ですべて記載して下さい。回答に必要な情報が足りません。
guest

回答3

0

発生しているエラーは型エラーです

data: TableItem[] = this.getdata();

ここでTableItem[]型にSubscriptionオブジェクトを代入しようとしているために発生しているようです。
他の方も言われているようにsubscribe()の中でthis.dataに値を代入する必要があります。

public getdata() { return this.httpGetHuman(apitoken).subscribe(data => this.data = data); }

投稿2019/07/02 23:36

s14pes

総合スコア55

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

subscribe()の戻り値はSubscriptionオブジェクトです。observableから流れてくるデータではありません。
subscribe()のコールバックの中でdata: TableItem[]に対してデータを入れる処理が書かれているので

data: TableItem[] = this.getdata();

この処理は不要で、任意のタイミングで

this.getdata()

を実行するだけでいいはずです。

投稿2018/07/11 04:46

keisukeh

総合スコア657

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Angularのチュートリアルですが、Hero Serviceが参考になると思います
https://stackblitz.com/angular/jambljkbpbgg?file=src%2Fapp%2Fhero.ts

AngularJSタグをつけて質問すると、ng-japanの中の人達が拾ってくれるかも

投稿2018/07/01 00:09

wuzzy

総合スコア152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問