0
次のコード(テストコード)が与えられた場合、要求されたファイルを1回だけ呼び出す最良の方法は何ですか?現在、ボタンを押すたびに、XHR要求が行われます。角2のHttpキャッシング
import {Injectable} from 'angular2/core';
import {Http} from 'angular2/http';
@Injectable()
export class MyService {
constructor(private http: Http) {}
getList() {
return this.http.get('./public/data.json')
.map(res => res.json());
}
getOne(id: number) {
return this.getList()
.map(data => data.filter(my => my.id === id)[0]);
}
}
ここでJSONデータファイルは、ここで
[
{"id": 1, "name": "Data 1"},
{"id": 2, "name": "Data 2"},
...
]
のコンポーネントファイルです。それは私がアプリケーションを起動するために、ここですべてのものを入れていないよ(idとnameプロパティを持つ唯一のクラスである)単純なモデルファイル
import {Component} from 'angular2/core';
import {MyService} from 'my-service';
import {MyModel} from 'my-model';
@Component({
selector: 'test',
templateUrl: `
<button (click)="getRandom()">Test</button>
<p>{{ selected.name }} ({{ selected.id }})</p>
`
})
export class MyComponent {
selected: MyModel;
constructor(private myService: MyService) {}
getRandom() {
let id = Math.floor((Math.random() * 10) + 1);
this.myService.getOne(id)
.subscribe((data: MyModel) => this.selected = data);
}
}
を使用しています。しかし、これはアイデアを示しています。
感謝
を私はObservable.ofの概念がありませんでした。ありがとう! – rekam
最高の答えは今までstackoverflowで見た。 1つは残念ながら残っています。doとsubscribeの違いは何ですか? – user2080105
@ user2080105 'do()'はobservable([docs](http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-do)の副作用として実行されます。 )。実際には他の何かがobservableにsubscribe()するまで実行されません。 – jessepinho