我正在关注this video tutorial(text version of the same)。我遵循完全相同的代码,我收到此错误:
错误TS2339:财产' getEmployees'在类型上不存在 '的EmployeeService'
我查看了互联网并访问了很多关于Stack Overflow的问题,例如this,this,this和this,以及与此错误相关的许多其他问题在GitHub。
服务
//import statements go here ...
@Injectable()
export class EmployeeService {
private listEmployees: Employee[] = [
{
//just to avoid longer code, deleted dummy data.
},
];
getEmployees(): Employee[] {
return this.listEmployees; //ERROR in src/app/employees/list-employees.component.ts(14,44)
}
}
组件类:
//import statements
@Component({
selector: 'app-list-employees',
templateUrl: './list-employees.component.html',
styleUrls: ['./list-employees.component.css']
})
export class ListEmployeesComponent implements OnInit {
employees: Employee[];
constructor(private _EmployeeService: EmployeeService) { }
ngOnInit() {
this.employees = this._EmployeeService.getEmployees();
}
}
我已在app.module.ts
中导入了服务,并将其添加到ngModule
的提供者数组中。
我无法解决错误,也无法理解造成此错误的原因。
答案 0 :(得分:9)
通常在开发Angular应用程序时会发生。要解决这个问题,只需关闭服务器即可。再次启动它:
$ ng serve
这是因为当您启动服务器时,您的应用程序实际上是存储在存储中的捆绑包的总和。当您对代码进行更改时,有时更改不会占用您的存储空间,这将导致服务器仍在使用旧的捆绑包。
答案 1 :(得分:2)
如果上述所有内容均已检查,请检查
constructor(private _employeeService: EmployeeService) { }
私有,访问说明符在那里。如果缺少访问说明符,则会发生相同的问题。
答案 2 :(得分:0)
如果您想避免编译警告,那么肮脏的修补程序将是
header.js
任何实例都允许任何方法调用该对象上的任何方法。这样可以避免编译警告,但它不是运行时安全的。
使用前,请务必小心。如果您确定该方法将在运行时可用,则仅使用它。
答案 3 :(得分:0)
我也将订阅服务方法,而不是将其保存到ngOnInit()
中的另一个值:
ngOnInit() {
this.employees = this._EmployeeService.getEmployees();
}
类似:
ngOnInit(){
this.getEmployees()
}
private getEmployees(): void {
this._EmployeeService.getEmployees()
.subscribe(fetchedEmployees = > this.employees = fetchedEmployees)
}
答案 4 :(得分:0)
如果您使用命令 ng serve
command 并构建成功。
然后,使用命令 ng build --prod
failed ,并且智能感知是正确的。
您可能在使用源代码时遇到问题。
对于enviroment config,不同的configuration
会使用不同的文件,都在angular.json
中。
By default ,environment.ts
将替换为 environment.prod.ts
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
...
因此,根据您的配置,您必须将 className.prod.ts
修改为 className.ts
。
答案 5 :(得分:-1)
在方法声明中使用静态关键字:
public static getEmployees(): any []{
}