gpt4 book ai didi

angular - TypeError : this. http.post(...).map 更新 Angular 5 到 Angular 6 后不是函数

转载 作者:行者123 更新时间:2023-12-02 20:58:23 24 4
gpt4 key购买 nike

将 Angular 5 更新到 Angular 6 后,我遇到了一些有关 rxjs6 的问题:

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 } from 'rxjs/operators';

change http.post().pipe(map(res => {...}))

但是,所有这些都不适合我。

我的环境如下:

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

代码如下 服务.ts

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

@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
}
}
).map((res: Response) => {
if ( res['errcode'] !== '00000') {
return [];
}
return res['datas'];
});
}
}

另一个问题 typescript 文件

import {Injectable} from '@angular/core';
import { PreloadingStrategy, Route } from '@angular/router';
import { Observable } 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 Observable.of(null);
}
}
}

最佳答案

RxJS v5.5.2+已移至 Pipeable 运算符,以改进树抖动并使创建自定义运算符变得更容易。 现在operators需要使用 pipe 进行组合方法
Refer This
新导入

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);
}
}
}

关于angular - TypeError : this. http.post(...).map 更新 Angular 5 到 Angular 6 后不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50595898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com