WedX - журнал о программировании и компьютерных науках

Angular 2: Создание HTTP-сервиса класса Singelton

В настоящее время я использую службу HTTP в своем проекте, поэтому мне приходится вызывать службы HTTP для каждого запроса, например,

 this.http.get((`${this._getAPI}}`))
        .map(res => res.json())
        .catch(err => Observable.throw(err.json().error));
}

который работает нормально, но должен писать его для каждого запроса, я хочу создать класс Singleton для HTTP-запросов, у которых есть функции GET, POST, DELETE, EDIT, SO, как я могу достичь класса службы Singelton Http, поэтому я не нужно писать эту строку снова для каждого запроса, просто хочу иметь что-то вроде этого

HttpService.callTheGetApi()//its just dummy example

где HttpService должен быть классом Singelton, имеющим один экземпляр.


  • Взгляните на это ответ 09.04.2017
  • Итак, что мешает вам написать класс HttpService? И что вы пробовали до сих пор? 09.04.2017

Ответы:


1

Создайте сервис HttpService и укажите его провайдера только в файле app.module.ts. Если вы не укажете провайдеров для этой службы ни в одном из своих компонентов, всякий раз, когда вы будете пытаться внедрить ее в компонент, Angular попытается найти ее провайдера. Поскольку он не определен на уровне компонента, он проверит своего родителя, прародителя и в конечном итоге достигнет корневого модуля, где был объявлен провайдер. В этом случае Angular будет использовать один-единственный экземпляр этой службы, созданный инжектором уровня приложения.

09.04.2017

2

Вы должны создать службу, которая упаковывает ваши вызовы API. Что-то похожее на это.

@Injectable()
export class BackendService {

  constructor(private http: Http) {}

  callTheGetApi() : Observable<any> {
    this.http.get((`${this._getAPI}}`))
      .map(res => res.json())
      .catch(err => Observable.throw(err.json().error));
  }
}

Затем (как предлагает Яков) предоставьте модуль где-нибудь в верхней части дерева компонентов, например, основной модуль или модуль вашего приложения.

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HttpModule } from '@angular/http';
import { ackendService } from './backend.service';

@NgModule({
  declarations: [
    AppComponent,
  ],
  imports: [
    HttpModule,
  ],
  declarations: [
  ],
  providers: [
    BackendService
  ]
})
export class AppModule { }

Затем в любом компоненте, который вы хотите сделать вызовом API, вы должны внедрить BackendService.

import { BackendService } from 'app/core/backend.service';

@Component({
  selector: 'app-some-comp',
  templateUrl: './some-comp.component.html',
})
export class SomeCompComponent {
  constructor(private backend: BackendService) {}

  someMethod() {
      this.backend.callTheGetApi().subscribe(() => {
        // handle the response
      });
  } 
}
10.04.2017
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]