Теперь у меня есть начальная страница, где у меня есть три ссылки. Как только вы нажмете на последнюю ссылку «друзья», появится соответствующий компонент друзей. Там я хочу получить / просмотреть список моих друзей в файле friends.json. До сих пор все работает отлично. Но я все еще новичок в HTTP-сервисе angular2, использующем концепцию RxJs «карта, подписка». Я пытался понять это и прочитал несколько статей, но пока я не приступлю к практической работе, я не пойму эти концепции должным образом.
Здесь я уже сделал plnkr, который работает, кроме работы, связанной с 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.
}
}
Пожалуйста, направьте и объясните правильно. Я знаю, что это будет очень полезно для многих новых разработчиков.
getFriends(){return http.get('friends.json').map(r => r.json());}
. Теперь вы можете звонитьgetFriends().subscribe(...)
без необходимости звонить.json()
каждый раз.Концепции
Наблюдаемые в коротких решениях асинхронной обработки и событий. По сравнению с обещаниями это можно описать как наблюдаемые = обещания + события.
Что замечательно с наблюдаемыми, так это то, что они ленивы, их можно отменить, и вы можете применить к ним некоторые операторы (например
map
, ...). Это позволяет обрабатывать асинхронные вещи очень гибко.Отличным примером, описывающим наилучшие возможности наблюдаемых, является способ подключения входа фильтра к соответствующему отфильтрованному списку. Когда пользователь вводит символы, список обновляется. Observables обрабатывают соответствующие запросы AJAX и отменяют предыдущие незавершенные запросы, если другой инициируется новым значением во входных данных. Вот соответствующий код:
(
textValue
это элемент управления, связанный с входом фильтра).Вот более широкое описание такого варианта использования: Как отслеживать изменения формы в Angular 2? ,
На AngularConnect 2015 и EggHead есть две отличные презентации:
Кристоф Бургдорф также написал несколько отличных постов в блоге на эту тему:
в действии
На самом деле в отношении вашего кода вы смешали два подхода ;-) Вот они:
Управляйте наблюдаемым самостоятельно . В этом случае вы обязаны вызвать
subscribe
метод для наблюдаемой и назначить результат в атрибут компонента. Затем вы можете использовать этот атрибут в представлении для перебора коллекции:Возвраты от обоих методов
get
иmap
методов являются наблюдаемым, а не результатом (так же, как с обещаниями).Позвольте управлять наблюдаемым по угловому шаблону . Вы также можете использовать
async
канал для неявного управления наблюдаемым. В этом случае нет необходимости явно вызыватьsubscribe
метод.Вы можете заметить, что наблюдаемые являются ленивыми. Таким образом, соответствующий HTTP-запрос будет вызван только один раз, когда прослушиватель подключен к нему, используя
subscribe
метод.Вы также можете заметить, что
map
метод используется для извлечения содержимого JSON из ответа и использования его затем в наблюдаемой обработке.Надеюсь, это поможет тебе, Тьерри
источник
pipes
также являютсяobservables
. проверьте это видео: youtube.com/watch?v=bVI5gGTEQ_U, предложенный thierry для получения дополнительной информации.HttpClient API был представлен в версии 4.3.0. Это развитие существующего HTTP API и имеет собственный пакет @ angular / common / http. Одним из наиболее заметных изменений является то, что теперь объектом ответа является JSON по умолчанию, поэтому больше нет необходимости анализировать его с помощью метода map. Теперь сразу можно использовать, как показано ниже
источник