从服务订阅数据时,类型 void 上不存在错误属性订阅?

Posted

技术标签:

【中文标题】从服务订阅数据时,类型 void 上不存在错误属性订阅?【英文标题】:error property subscribe doesn't exist on type void when subscribe data from service? 【发布时间】:2020-09-12 11:46:05 【问题描述】:

我在 Angular 7 应用程序上工作我遇到错误属性订阅不存在于类型上

从服务订阅数据时无效。

app.component.ts 上订阅数据功能的错误显示 那么如果可能的话如何解决这个问题?

allReportCategories:any[];
ngOnInit() 


       this._displayreport.getallReportCategories().subscribe((data: any[]) =>   
        this.allReportCategories = data;  

      ); 

显示报告服务 ts

allReportCategories:any[];


getallReportCategories()

    return 

     this.allReportCategories=[
    
        "reportCategoryID": 1,
        "reportCategory": "Dashboard Parametric",
        "isDeleted": false,
        "menuIcon": "icon-home"
    ,
    
        "reportCategoryID": 2,
        "reportCategory": "Monitor Reports",
        "isDeleted": false,
        "menuIcon": "icon-list"
    ,
    
        "reportCategoryID": 3,
        "reportCategory": "Other Reports",
        "isDeleted": false,
        "menuIcon": "icon-docs"
    ,
    
        "reportCategoryID": 4,
        "reportCategory": "PCN Flow",
        "isDeleted": false,
        "menuIcon": "icon-list"
    ,
    
        "reportCategoryID": 5,
        "reportCategory": "Compliance By Document",
        "isDeleted": false,
        "menuIcon": "icon-home"
    
];

  

stackbliz 上的示例如下:

https://stackblitz.com/edit/create-1arrvm?file=app%2Fdisplayreport.service.ts

更具体地回答我的问题

我在这里改变了什么:

this._displayreport.getallReportCategories().subscribe

【问题讨论】:

我可能在这里遗漏了一些东西,但是您服务上的函数“getallReportCategories”只返回一个数组,而不是可以观察/订阅的东西? 那么我改变或做什么来解决问题 实际上我需要在 app.component.ts 上表示来自 allReportCategories 的数据,所以解决问题的方法是什么 你能写出正确的方式将上面的数据数组发送到component.ts 如果您需要一次数据,则只需返回数组。如果操作是异步的,那么只需等待 Promise 或回调的返回值。我假设您知道 Observables 和“.subscribe()”的作用,并且您没有使用自己不了解的代码。在某些情况下,您希望多次返回值而没有重复的函数调用,这就是您可能要考虑使用主题/事件/可观察对象的地方:) 在您的情况下,再次,只需返回数组并在另一端重新接收它.无需在这里订阅。 【参考方案1】:

你需要创建 observable 来订阅

例子:-

在显示报表服务ts

import  BehaviorSubject  from 'rxjs';


getallReportCategories()

const allReportCategories = [
    
        "reportCategoryID": 1,
        "reportCategory": "Dashboard Parametric",
        "isDeleted": false,
        "menuIcon": "icon-home"
    ,
    
        "reportCategoryID": 2,
        "reportCategory": "Monitor Reports",
        "isDeleted": false,
        "menuIcon": "icon-list"
    ,
    
        "reportCategoryID": 3,
        "reportCategory": "Other Reports",
        "isDeleted": false,
        "menuIcon": "icon-docs"
    ,
    
        "reportCategoryID": 4,
        "reportCategory": "PCN Flow",
        "isDeleted": false,
        "menuIcon": "icon-list"
    ,
    
        "reportCategoryID": 5,
        "reportCategory": "Compliance By Document",
        "isDeleted": false,
        "menuIcon": "icon-home"
    
];


    return new BehaviorSubject(allReportCategories)

  

在组件中

allReportCategories:any[];
ngOnInit() 


       this._displayreport.getallReportCategories().subscribe((data: any[]) =>   
        this.allReportCategories = data;  

      ); 

【讨论】:

我可以在没有订阅的情况下发送数据吗?假设我不需要订阅,可以这样做或强制必须订阅 请阅读什么是 observables 和 subscriptions。那里有大量易于理解的教程。当互联网/youtube上有更好的教程时,试图在这里向您解释基本内容是没有意义的 :) 并且请永远不要使用您不这样做的代码。如果你遇到像“subscribe()”这样的词并且不知道它是做什么的,那么就去了解它。使用你不理解的代码是非常冒险的,并且在中/长期不会导致任何结果^^°

以上是关于从服务订阅数据时,类型 void 上不存在错误属性订阅?的主要内容,如果未能解决你的问题,请参考以下文章

“void”类型上不存在属性“map”。在角度

错误 TS2339:类型“”上不存在属性“包含”

“对象”类型上不存在属性“”。可观察订阅

角度:错误 TS2339:“对象”类型上不存在属性“数据”

类型 ' $route(currentRoute: any): void; 上不存在属性' 在 Ionic Vue 中

类型上不存在属性推送