Метод подписки без Rxjs

Я новичок в Angular 5, и я использовал следующие методы для входа в систему. Ниже приведены мои функции. Но меня смущает наблюдаемый, потому что во всех статьях говорится о методе подписки с наблюдаемым с помощью Rx.

Что-то не так в моей реализации метода. Я не использовал библиотеку Rxjs.

Мой login.ts

import { Component } from '@angular/core';
import { HttpErrorResponse } from '@angular/common/http';

import { RestProvider } from '../../providers/rest/rest';
login(data) {
    this.restProvider.loginToken(this.registerCredentials).subscribe((data : any)=>{
      localStorage.setItem('userToken',data.access_token);

    },
    (err : HttpErrorResponse)=>{
      this.isLoginError = true;
    });
  }

Мой Rest.ts

import { HttpClient,HttpHeaders } from '@angular/common/http';
import { Injectable } from '@angular/core';

  apiUrl='http://localhost:26264'
  constructor(public http: HttpClient) {
    console.info('Hello RestProvider Provider');
  }

loginToken(data){
  var details = this.jsonToURLEncoded({ grant_type:'password', username:data.email, password:data.password,});
  var reqHeader = new HttpHeaders({ 'Content-Type': 'application/x-www-urlencoded','No-Auth':'True' });
  const options = {
    headers: reqHeader



  }
  console.info(details);
  return this.http.post(this.apiUrl + '/token', details, options);
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
2
0
573
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Observable - это шаблон, а rxjs - библиотека, реализующая наблюдаемый шаблон.

rxjs - это одна из основ построения углового ядра, многие из угловых API-интерфейсов наблюдаются, зачем подписываться? observable является ленивым, что является одним из отличий между Promise, например, запрос HttpClient будет сделан, когда вы используете подписку.

вы можете прочитать об этом в угловой документ - наблюдаемый

Ответ принят как подходящий

Вы использовали HttpClient, если вы посмотрите на этот класс, вы увидите, что он возвращает тип Observable<any>, это означает, что эта функция встроена в функцию HttpClient.

class HttpClient {
  request(first: string | HttpRequest<any>, url?: string, options: {...}): Observable<any>
  delete(url: string, options: {...}): Observable<any>
  get(url: string, options: {...}): Observable<any>
  head(url: string, options: {...}): Observable<any>
  jsonp<T>(url: string, callbackParam: string): Observable<T>
  options(url: string, options: {...}): Observable<any>
  patch(url: string, body: any | null, options: {...}): Observable<any>
  post(url: string, body: any | null, options: {...}): Observable<any>
  put(url: string, body: any | null, options: {...}): Observable<any>
}

Из Angular DOC

Angular makes use of observables as an interface to handle a variety of common asynchronous operations.

For example:

  • The EventEmitter class extends Observable.
  • The HTTP module uses observables to handle AJAX requests and responses.
  • The Router and Forms modules use observables to listen for and respond to user-input events.

Поэтому в этих случаях вам не нужно использовать Rxjs напрямую, используя их библиотеку.

Вы использовали this.http.post(this.apiUrl + '/token', details, options);, это тоже возврат Observable

Из Angular DOC

Constructs an Observable which, when subscribed, will cause the configured POST request to be executed on the server. See the individual overloads for details of post()'s return type based on the provided options.

Eg. Construct a POST request which interprets the body as an ArrayBuffer and returns it.

post(url: string, body: any | null, options: {
    headers?: HttpHeaders | {
        [header: string]: string | string[];
    };
    observe?: 'body';
    params?: HttpParams | {
        [param: string]: string | string[];
    };
    reportProgress?: boolean;
    responseType: 'arraybuffer';
    withCredentials?: boolean;
}): Observable<ArrayBuffer>

See more here

Также обратитесь по этим ссылкам

Надеюсь, что это поможет вам!

Я могу получить токен с сервера, но я вижу ответ два раза, т.е. 200 Ok. Показывает два раза. Значит ли это, что код выполняется 2 раза? На самом деле я нажал кнопку только один раз.

aniltc 21.07.2018 18:20

не забудьте отказаться от подписки на this.restProvider.loginToken при уничтожении компонента. например сначала объявите переменную subscription: ISubscription; и назначьте subscription = this.restProvider.loginToken(this.registerCredentials).subsc‌​ribe... и реализуйте OnDestroy на вашем компоненте, а внутри ngOnDestroy() используйте как этот this.subscription.unsubscribe();

coder 21.07.2018 18:37

Другие вопросы по теме