Teraz mam stronę początkową, na której mam trzy linki. Po kliknięciu ostatniego łącza „znajomi” inicjowany jest odpowiedni komponent znajomych. W tym miejscu chcę pobrać / pobrać listę moich znajomych wpisanych do pliku friends.json. Do tej pory wszystko działa dobrze. Ale nadal jestem nowicjuszem w usłudze HTTP angular2, używającej obserwojów, mapy, subskrypcji RxJs. Próbowałem to zrozumieć i przeczytałem kilka artykułów, ale dopóki nie zabiorę się do praktycznej pracy, nie zrozumiem poprawnie tych pojęć.
Tutaj już stworzyłem plnkr, który działa z wyjątkiem pracy związanej z HTTP.
myfriends.ts
import {Component,View,CORE_DIRECTIVES} from 'angular2/core';
import {Http, Response,HTTP_PROVIDERS} from 'angular2/http';
import 'rxjs/Rx';
@Component({
template: `
<h1>My Friends</h1>
<ul>
<li *ngFor="#frnd of result">
{{frnd.name}} is {{frnd.age}} years old.
</li>
</ul>
`,
directive:[CORE_DIRECTIVES]
})
export class FriendsList{
result:Array<Object>;
constructor(http: Http) {
console.log("Friends are being called");
// below code is new for me. So please show me correct way how to do it and please explain about .map and .subscribe functions and observable pattern.
this.result = http.get('friends.json')
.map(response => response.json())
.subscribe(result => this.result =result.json());
//Note : I want to fetch data into result object and display it through ngFor.
}
}
Prosimy o właściwe prowadzenie i wyjaśnianie. Wiem, że będzie to bardzo korzystne dla wielu nowych programistów.
getFriends(){return http.get('friends.json').map(r => r.json());}
. Teraz możesz dzwonićgetFriends().subscribe(...)
bez konieczności dzwonienia za.json()
każdym razem.Koncepcje
Observables w skrócie dotyczy asynchronicznego przetwarzania i zdarzeń. W porównaniu do obietnic można to opisać jako obserwowalne = obietnice + zdarzenia.
Wspaniałe w przypadku obserwabli jest to, że są leniwe, można je anulować i można w nich zastosować pewne operatory (np.
map
, ...). Pozwala to na obsługę rzeczy asynchronicznych w bardzo elastyczny sposób.Świetną próbką opisującą najlepiej moc obserwabli jest sposób połączenia wejścia filtra z odpowiednią przefiltrowaną listą. Kiedy użytkownik wprowadza znaki, lista jest odświeżana. Observables obsługują odpowiednie żądania AJAX i anulują poprzednie żądania w toku, jeśli inne jest wyzwalane przez nową wartość na wejściu. Oto odpowiedni kod:
(
textValue
jest sterowaniem skojarzonym z wejściem filtra).Oto szerszy opis takiego przypadku użycia: Jak obserwować zmiany formy w Angular 2? .
Istnieją dwie świetne prezentacje na AngularConnect 2015 i EggHead:
Christoph Burgdorf napisał również kilka świetnych postów na ten temat:
W akcji
W rzeczywistości, jeśli chodzi o twój kod, pomieszałeś dwa podejścia ;-) Oto one:
Zarządzaj obserwowalnymi samodzielnie . W takim przypadku jesteś odpowiedzialny za wywołanie
subscribe
metody na obserowalnej i przypisanie wyniku do atrybutu komponentu. Następnie możesz użyć tego atrybutu w widoku do iteracji po kolekcji:Zwroty z obu metod
get
imap
metod są obserwowalne, a nie wynikiem (w taki sam sposób, jak w przypadku obietnic).Pozwól zarządzać obserwowalnymi za pomocą szablonu Angular . Możesz również wykorzystać
async
potok do niejawnego zarządzania obserwowalnymi. W takim przypadku nie ma potrzeby jawnego wywoływaniasubscribe
metody.Możesz zauważyć, że obserwable są leniwe. Tak więc odpowiednie żądanie HTTP zostanie wywołane tylko raz, gdy odbiornik zostanie do niego dołączony przy użyciu
subscribe
metody.Możesz również zauważyć, że
map
metoda jest używana do wyodrębnienia zawartości JSON z odpowiedzi i wykorzystania jej następnie w obserwowalnym przetwarzaniu.Mam nadzieję, że to ci pomoże, Thierry
źródło
pipes
są równieżobservables
. obejrzyj ten film: youtube.com/watch?v=bVI5gGTEQ_U zasugerowany przez thierry, aby uzyskać więcej informacji.Interfejs API HttpClient został wprowadzony w wersji 4.3.0. Jest to ewolucja istniejącego interfejsu API HTTP i ma własny pakiet @ angular / common / http. Jedną z najbardziej znaczących zmian jest to, że teraz obiekt odpowiedzi jest domyślnie JSON, więc nie ma już potrzeby analizowania go metodą map. Od razu możemy użyć jak poniżej
źródło