Ошибка типа: this.http.post (...). Map не является функцией после обновления углового 5 до углового 6 - PullRequest
0 голосов
/ 30 мая 2018

У меня возникает проблема с rxjs6 после обновления Angular 5 до Angular 6:

TypeError: this.http.post(...).map is not a function

error TS2339: Property 'map' does not exist on type 'Observable<Object>'.

TypeError: rxjs__WEBPACK_IMPORTED_MODULE_1__.Observable.of is not a function

Я пробовал некоторые методы, например:

добавить этот импорт в service.ts

import {map} из 'rxjs / operator';

изменить http.post (). Pipe (map (res => {...)}))

Однако у меня не все работают.

Моя среда выглядит следующим образом:

 "@angular/cli": "^6.0.3"
 "rxjs": "^6.2.0"
 "rxjs-compat": "^6.2.0"

codeпоказать как показано ниже

1 Ответ

0 голосов
/ 30 мая 2018

RxJS v5.5.2+ перемещено в Pipeable операторов для улучшения встряхивания дерева и упрощения создания пользовательских операторов.Теперь operators необходимо объединить, используя метод pipe
. См.
Новый импорт

import { map} from 'rxjs/operators';

Пример

myObservable
  .pipe(filter(data => data > 8),map(data => data * 2),)
  .subscribe(...);

Методы создания Observables

Ранее

 import 'rxjs/add/observable/of';
            // or 
            import { of } from 'rxjs/observable/of
        const source = Observable.of(1, 2, 3, 4, 5);

            const subscribe = source.subscribe(val => console.log(val));

В RXJS: 6 синтаксисизменился и импортируйте тоже Вместо Observable.of используйте of

import { Observable, of } from 'rxjs';

    const source = of(1, 2, 3, 4, 5);

    const subscribe = source.subscribe(val => console.log(val));

Модифицированный код

  import { Injectable } from '@angular/core';
import {environment} from '../../environments/environment';
import {HttpClient} from '@angular/common/http';
import {StorageService} from '../services/storage.service';
import {map} from 'rxjs/operators';

@Injectable()
export class VariationService {
ip = environment.url.management;
constructor(private http: HttpClient,
            private storageService: StorageService) { }
getFlowChart(status?) {
    status = status ? status : '';
    let token = this.storageService.getToken('token');
    return this.http.post(
        `${this.ip}/workflow`,
        {
            'access_token': token,
            'type': 'adjustment_workflow_get',
            'data': {
                'status': status
            }
        }
    ).pipe(map((res: Response) => {
      if ( res['errcode'] !== '00000') {
        return [];
      }
      return res['datas'];
    }));
}
} 

Модифицированный код

  import {Injectable} from '@angular/core';
import { PreloadingStrategy, Route } from '@angular/router';
import { Observable,of } from 'rxjs';

@Injectable()
export class SelectivePreloadingStrategy implements PreloadingStrategy {
  preloadedModules: string[] = [];
  preload(route: Route, load: () => Observable<any>): Observable<any> {
    if (route.data && route.data['preload']) {
      this.preloadedModules.push(route.path);
     return load();
    } else {
      return of(null);
    }
  }
} 
...