Angular服务中getDays方法被编译器误识别为属性且提示私有访问错误
Angular服务中getDays方法被编译器误识别为属性且提示私有访问错误
嘿,我一眼就看出问题所在啦!你遇到的编译器提示其实不是“误识别方法为属性”,核心原因是服务里的getDays()方法被声明成私有(private)的了,组件根本没有权限去调用它。
咱们一步步拆解:
你在
LiveDashboardService里定义的getDays()方法加了private修饰符:private getDays(): string[] { return this.days.slice(); }在TypeScript中,私有成员(不管是属性还是方法)只能在类的内部访问,外部组件是没法直接调用的。编译器提示里的“Property 'getDays'”只是TypeScript对类成员的统一描述方式,它把方法也归为类的成员范畴,并不是真的把方法当成了属性。
解决方法超级简单:把服务里
getDays()方法的private改成public,让它变成对外暴露的公共方法,这样组件就能正常调用了。
修改后的服务代码如下:
import { Injectable } from "@angular/core"; @Injectable({ providedIn: "root", }) export class LiveDashboardService { private days: string[] = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; constructor() {} // 把private改成public即可 public getDays(): string[] { return this.days.slice(); } }
另外提一句,你用slice()返回数组副本的做法非常好,这样外部组件拿到的是新数组,不会意外修改服务里的私有days数组,保持了数据的封装性👍
备注:内容来源于stack exchange,提问作者liberlux
相关产品推荐
相关产品推荐

