как мы можем отправлять данные внутри модулей в Angular 2+ - PullRequest
0 голосов
/ 19 декабря 2018

Я застрял при отправке небольшого фрагмента данных из одного модуля в другой.Я не храню этот кусок данных в параметрах запроса или в каком-либо хранилище или кэшировании на уровне браузера.Какие варианты есть для меня или есть ли у angular какой-либо механизм, позволяющий сделать это без перезагрузки моего приложения.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Вы можете создать общий сервис.Затем вы можете подписаться на эту услугу в обоих ваших модулях и поделиться своими данными.

например:

это моя http-служба, которая используется всеми модулями

import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
import { APIUrls } from '../Enums/api-url.enum';
import { HttpResponse } from 'selenium-webdriver/http';
import { SessionStorageService } from './session-storage.service';
import { SessionStorageKeys } from '../Enums/session-storage-keys.enum';

@Injectable()
export class HttpService {

  constructor(private _http: HttpClient, private _sessionService: SessionStorageService) {

  }

  public PostRequest(apiURL: string, body: any): Observable<HttpResponse> {
    let auth_token = this._sessionService.get(SessionStorageKeys.AUTH_TOKEN);
    const httpOptions = {
      headers: new HttpHeaders({
        'Content-Type': 'application/json',
        'Authorization': 'Bearer ' + auth_token
      })
    };
    return this._http.post(APIUrls.BaseURL + apiURL, body, httpOptions);
  }

  public GetRequest(apiURL: string): Observable<HttpResponse> {
    let auth_token = this._sessionService.get(SessionStorageKeys.AUTH_TOKEN);
    const httpOptions = {
      headers: new HttpHeaders({
        'Content-Type': 'application/json',
        'Authorization': 'Bearer ' + auth_token
      })
    };
    return this._http.get(APIUrls.BaseURL + apiURL, httpOptions);
  }

  private _transformRequest(obj: any): any {
    var str = [];
    for (var p in obj)
      if (obj.hasOwnProperty(p)) {
        str.push(encodeURIComponent(p) + ":" + encodeURIComponent(obj[p]));
      }
    return str;
  }

}

Я добавил этот сервис в провайдеров массив app.module.ts

, а затем внедрил этот сервис в конструкторы компонентов в различных модулях

0 голосов
/ 19 декабря 2018

Сервисы рассчитаны на одно и то же, (Внедрение зависимостей)

@Injectable()
export class SomeService {
//define a variable
someVariable = "xyz";
}

Предоставьте этот сервис в родительском или корневом модуле компонентов (app.module.ts)

внедрите сервисв компонентах

one.component.ts
constructor(private someService: SomeService) {

}

// обновить переменную здесь

this.someService.someVariable = "Value Changed"

two.component.ts
constructor(private someService: SomeService) {}
// updated variable can be accessed here
console.log(this.someService.someVariable);
...