从服务订阅数据时,类型 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 上不存在错误属性订阅?的主要内容,如果未能解决你的问题,请参考以下文章