当前位置: 首页 > 知识库问答 >
问题:

属性映射不存在于类型'可观察的'

冷正信
2023-03-14

我想使用以下代码实现文件下载:

RestAPI:

@GetMapping("export")
    public ResponseEntity<InputStreamResource> export() throws IOException {
        ClassPathResource pdfFile = new ClassPathResource(EXTERNAL_FILE_PATH);

        HttpHeaders headers = new HttpHeaders();
        headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
        headers.add("Pragma", "no-cache");
        headers.add("Expires", "0");

        return ResponseEntity.ok().headers(headers).contentLength(pdfFile.contentLength())
                .contentType(MediaType.parseMediaType("application/pdf"))
                .body(new InputStreamResource(pdfFile.getInputStream()));
    }

服务:

import {Injectable} from '@angular/core';
import {HttpClient, HttpParams} from "@angular/common/http";
import {Observable} from "rxjs/index";
import {environment} from "../../../environments/environment";
import {HttpUtils} from "../common/http-utils";
import { map } from 'rxjs/operators';

@Injectable({
  providedIn: 'root'
})
export class DownloadService {

  constructor(private http: HttpClient) {
  }

  downloadPDF(): any {
    return this.http.get(environment.api.urls.downloads.getPdf, { responseType: 'blob' }).map(
    (res) => {
        return new Blob([res.blob()], { type: 'application/pdf' });
    });
  }  
}

组件:

import {Component, OnInit} from '@angular/core';
import {DownloadService} from "../service/download.service";
import {ActivatedRoute, Router} from "@angular/router";
import {flatMap} from "rxjs/internal/operators";
import {of} from "rxjs/index";
import { map } from 'rxjs/operators';

@Component({
  selector: 'app-download',
  templateUrl: './download.component.html',
  styleUrls: ['./download.component.scss']
})
export class DownloadComponent implements OnInit {

  constructor(private downloadService: DownloadService,
              private router: Router,
              private route: ActivatedRoute) {
  }

  ngOnInit() {   
  }

  export() {               
    this.downloadService.downloadPDF().subscribe(res => {
      const fileURL = URL.createObjectURL(res);
      window.open(fileURL, '_blank');
    });         
  } 
}

当我启动angular时,我得到错误:src/app/panel/service/download中的错误。服务ts(17,91):错误TS2339:类型“Observable”上不存在属性“map”。

map导入代码的正确wya是什么?当我点击下载按钮时,什么也没发生。

共有2个答案

尉迟国发
2023-03-14

您可以这样调用请求,因为您使用的是angular 6

downloadPDF(): any {
    return this.http.get(environment.api.urls.downloads.getPdf, { responseType: 'blob' });
  }  

更新:导入响应内容类型

从'@angular/Http'导入{Http,ResponseContentType};

邓元白
2023-03-14

您可能正在使用Rxjs 5.5或更高版本。

在Rxjs 5.5之后,您不能再直接在可观察值上链接像map这样的运算符。您必须使用。管道,然后传递逗号分隔的运算符列表。

import { map } from 'rxjs/operators';
...
downloadPDF(): any {
  return this.http.get(environment.api.urls.downloads.getPdf, {
    responseType: 'blob',
    observe: 'response'
  })
  .pipe(
    map((res: any) => {
      return new Blob([res.blob()], { type: 'application/pdf' });
    })
  );
}

这是给你裁判的StackBlitz样本。

顺便说一句,资源管理器是一个了不起的工具,可以检查Rxjs语法到目前为止是如何变化的。

 类似资料:
  • 我刚刚从Angular 2 beta16升级到beta17,这反过来需要rxjs 5.0。0-β。6.(此处的更改日志:https://github.com/angular/angular/blob/master/CHANGELOG.md#200-beta17-2016-04-28)在beta16中,关于可观测/地图功能,所有功能都运行良好。以下错误在我升级后出现,并在typescript尝试传输

  • 我需要在Nativescript中从web服务获取所有警报。但是地图不起作用。我试过这个函数。在Angular 5中工作正常,但在Nativescript中显示此错误: [ts]类型“Observable”上不存在属性“map”。在这方面。映射((响应:响应)= 我导入这个:

  • 我是个新手。目前我正在学习6个特征。当我试图处理错误时,会出现如下问题:, 未找到模块:错误:无法解析“D:\WORKSPACE\Angular5\binding\src\app”中的“rxjs/add/observable/throw” 找不到模块:错误:无法解决'D:\WORKSPACE\Angular5\绑定\src\app'中的'rxjs/add/操作员/捕获' src/app/emplo

  • 我刚刚开始使用Angular2,我有一个我不能真正理解的问题。 我创建了一些模拟数据: 然后将其导入服务并“观察” 然后我有一个组件,在构造函数中: 第一个控制台。日志记录包含testDataArray属性的Object类型的对象。 第二个控制台。日志,在编译时导致错误: 同时仍按预期记录对象[Object, Object,...]的数组。 我真的不明白为什么,我肯定我做错了什么,我想要一个解释。

  • 导览 本小节主要介绍 Apache ShardingSphere 可观察性的相关功能 应用性能监控集成

  • 问题内容: 回答“ 我如何知道数组内元素的值是否已更改”这一问题时受到启发 ,答案是使用 属性观察 器检查数组是否已被修改。 但是,如何确定属性查看器中集合类型中的已更新元素是什么?例如: 请注意,每次添加,更新或删除操作都已调用该代码,但是我如何才能确切知道受影响的元素是什么?有没有办法通过将数组除以 Property Observer 来实现这一目标? 我问的是Swift中的所有集合类型,因为