Maintenant, j'ai une page initiale où j'ai trois liens. Une fois que vous cliquez sur le dernier lien «amis», le composant amis approprié est lancé. Là-dedans, je veux récupérer / obtenir la liste de mes amis dans le fichier friends.json. Jusqu'à présent, tout fonctionne bien. Mais je suis toujours un novice pour le service HTTP d'angular2 utilisant le concept d'observables, de carte et d'abonnement de RxJs. J'ai essayé de le comprendre et lu quelques articles, mais tant que je n'aurai pas commencé un travail pratique, je ne comprendrai pas ces concepts correctement.
Ici, j'ai déjà fait plnkr qui fonctionne sauf le travail lié à 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.
}
}
Veuillez guider et expliquer correctement. Je sais que ce sera très bénéfique pour de nombreux nouveaux développeurs.
getFriends(){return http.get('friends.json').map(r => r.json());}
. Désormais, vous pouvez appelergetFriends().subscribe(...)
sans avoir à appeler à.json()
chaque fois.Concepts
Les observables en bref abordent le traitement et les événements asynchrones. Comparé aux promesses, cela pourrait être décrit comme observables = promesses + événements.
Ce qui est génial avec les observables, c'est qu'ils sont paresseux, ils peuvent être annulés et vous pouvez y appliquer des opérateurs (comme
map
, ...). Cela permet de gérer les choses asynchrones de manière très flexible.Un excellent exemple décrivant au mieux la puissance des observables est la manière de connecter une entrée de filtre à une liste filtrée correspondante. Lorsque l'utilisateur entre des caractères, la liste est actualisée. Les observables gèrent les requêtes AJAX correspondantes et annulent les requêtes en cours précédentes si une autre est déclenchée par une nouvelle valeur dans l'entrée. Voici le code correspondant:
(
textValue
est le contrôle associé à l'entrée du filtre).Voici une description plus large d'un tel cas d'utilisation: Comment surveiller les changements de formulaire dans Angular 2? .
Il y a deux excellentes présentations à AngularConnect 2015 et EggHead:
Christoph Burgdorf a également écrit quelques bons articles de blog sur le sujet:
En action
En fait concernant votre code, vous avez mélangé deux approches ;-) Les voici:
Gérez vous-même l'observable . Dans ce cas, vous êtes responsable d'appeler la
subscribe
méthode sur l'observable et d'affecter le résultat dans un attribut du composant. Vous pouvez ensuite utiliser cet attribut dans la vue pour itérer sur la collection:Les retours des deux méthodes
get
etmap
sont l'observable et non le résultat (de la même manière qu'avec les promesses).Laissez gérer l'observable par le modèle angulaire . Vous pouvez également tirer parti du
async
canal pour gérer implicitement l'observable. Dans ce cas, il n'est pas nécessaire d'appeler explicitement lasubscribe
méthode.Vous pouvez remarquer que les observables sont paresseux. Ainsi, la requête HTTP correspondante ne sera appelée qu'une seule fois un écouteur avec attaché dessus en utilisant la
subscribe
méthode.Vous pouvez également remarquer que la
map
méthode est utilisée pour extraire le contenu JSON de la réponse et l'utiliser ensuite dans le traitement observable.J'espère que cela vous aide, Thierry
la source
pipes
est également unobservables
. regardez cette vidéo: youtube.com/watch?v=bVI5gGTEQ_U suggéré par thierry pour plus d'informations.L'API HttpClient a été introduite dans la version 4.3.0. Il s'agit d'une évolution de l'API HTTP existante et possède son propre package @ angular / common / http. L'un des changements les plus notables est que maintenant l'objet de réponse est un JSON par défaut, il n'est donc plus nécessaire de l'analyser avec la méthode map.
la source