我有一個組件通過http獲取服務中的數據,問題是我不想在每次顯示此組件時都點擊API後端。我希望我的服務能夠檢查數據是否在內存中,如果是,則返回一個帶內存數組的observable,如果沒有,則發出http請求。Angular2:將數組轉換爲Observable
我的組件
import {Component, OnInit } from 'angular2/core';
import {Router} from 'angular2/router';
import {Contact} from './contact';
import {ContactService} from './contact.service';
@Component({
selector: 'contacts',
templateUrl: 'app/contacts/contacts.component.html'
})
export class ContactsComponent implements OnInit {
contacts: Contact[];
errorMessage: string;
constructor(
private router: Router,
private contactService: ContactService) { }
ngOnInit() {
this.getContacts();
}
getContacts() {
this.contactService.getContacts()
.subscribe(
contacts => this.contacts = contacts,
error => this.errorMessage = <any>error
);
}
}
我的服務
import {Injectable} from 'angular2/core';
import {Http, Response, Headers, RequestOptions} from 'angular2/http';
import {Contact} from './contact';
import {Observable} from 'rxjs/Observable';
@Injectable()
export class ContactService {
private contacts: Array<Contact> = null;
constructor (private http: Http) {
}
getContacts() {
// Check first if contacts == null
// if not, return Observable(this.contacts)? <-- How to?
return this.http.get(url)
.map(res => <Contact[]> res.json())
.do(contacts => {
this.contacts = contacts;
console.log(contacts);
}) // eyeball results in the console
.catch(this.handleError);
}
private handleError (error: Response) {
// in a real world app, we may send the server to some remote logging infrastructure
// instead of just logging it to the console
console.error(error);
return Observable.throw(error.json().error || 'Server error');
}
}
它像一個魅力工作!非常感謝! – Mathius17
這可能是一個愚蠢的問題,但不能只緩存observable本身並調用.next()而不是緩存狀態並在每次調用時重新創建observable? –
好點,我會試試。雖然我不是最好的,因爲當我想迭代數組以返回一個特定鍵的聯繫人時 – Mathius17