我遇到了这个问题,我的应用运行正常,但是此错误在IDE中显示。
employee.service.ts:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class EmployeeService {
getEmployee(){
return [
{"id":1,"name":"Micheal","age":21},
{"id":2,"name":"Jackson","age":22},
{"id":3,"name":"Hales","age":23},
{"id":4,"name":"Moz","age":25}
];
}
constructor() { }
}
和我的employeeDetail.ts文件是这样的:
import { Component, OnInit } from '@angular/core';
import { EmployeeService } from '../services/employee.service';
@Component({
selector: 'employee-detail',
templateUrl: './employee-detail.component.html',
styleUrls: ['./employee-detail.component.css']
})
export class EmployeeDetailComponent implements OnInit {
public employees = [];
constructor(private _employeeService : EmployeeService) {
}
ngOnInit() {
this.employees = this._employeeService.getEmployee();
}
}
这是Employee-list.ts
import { Component, OnInit } from '@angular/core';
import {HttpClientModule} from '@angular/common/http';
import { EmployeeService } from '../services/employee.service';
@Component({
selector: 'employee-list',
templateUrl: './employee-list.component.html',
styleUrls: ['./employee-list.component.css']
})
export class EmployeeListComponent implements OnInit {
public employees = []
constructor(private _employeeService : EmployeeService) {
}
ngOnInit() {
this.employees = this._employeeService.getEmployee();
}
}
我该如何解决这个问题?实际问题是什么?由于我是angular6的新手,所以我无法找出错误,请对此进行解释。谢谢。
答案 0 :(得分:1)
这似乎与新的Angular编译器选项fullTemplateTypeCheck有关,如果在tsconfig文件中将该选项设置为true,则会出现错误。
这是tsconfig.app.json文件的一个示例,该文件再现了构建错误:
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"baseUrl": "./",
"module": "es2015",
"types": []
},
"angularCompilerOptions": {
"fullTemplateTypeCheck": true
},
"exclude": [
"test.ts",
"**/*.spec.ts"
]
}
答案 1 :(得分:1)
这是有效的错误,并非由fullTemplateTypeCheck
编译选项引起的。当您创建类的对象使用Angular可注入对象的实例时,就会发生这种情况。如果您切换到将类用作可注射剂,则可以解决。
这是一个可行的例子。假设我们有一个服务类,如下所示:
/**
* First Service
*/
import { Injectable } from '@angular/core';
import { SecondService } from './second-service';
@Injectable({
providedIn: 'root',
})
export class FirstService {
constructor(public secondService: SecondService) {
...
}
}
如果您尝试通过new FirstService()
在其他服务或组件中使用它,则会看到错误。
/**
* Third Service
*/
import { Injectable } from '@angular/core';
import { FirstService } from './first-service';
@Injectable({
providedIn: 'root',
})
export class ThirdService {
firstService: any;
constructor() {
this.firstService = new FirstService();
}
}
发生错误error TS2554: Expected X arguments, but got 0.
是因为如果您尝试像这样直接实例化可注入类确实,则有参数。如果将它用作Angular注射剂,则不再是问题。
/**
* Third Service
*/
import { Injectable } from '@angular/core';
import { FirstService } from './first-service';
@Injectable({
providedIn: 'root',
})
export class ThirdService {
constructor(public firstService: FirstService) {
...
}
}
使用FirstService
作为角度@Injectable
解决了这个问题。
@intotecho的答案对于确定这一点非常有帮助。
答案 2 :(得分:0)
我看不到您的代码有任何问题,因为我认为您应该使用Ctrl + C
停止申请
然后执行 ng serve
无论如何,原因是,您的getEmployee方法仍然需要传递一个参数,只需确保将代码保存在服务部分即可。
答案 3 :(得分:0)
使用Angular8,我在这一行有相同的错误触发器:
private configService= new ConfigService();
根据演示,ConfigService在其中使用HttpClient的地方。
我正在用new构建组件内部的服务,并且需要HttpClient作为实例化服务的参数。
@Component({
selector: 'app-main',
templateUrl: './main.component.html',
styleUrls: ['./main.component.css' ],
})
export class MainComponent {
private dataService= new ConfigService();
}
更改为此,错误消失。请注意添加了行提供程序:[ConfigService]
@Component({
selector: 'app-main',
templateUrl: './main.component.html',
styleUrls: ['./main.component.css' ],
providers: [ConfigService]
})
export class MainComponent {
private dataService: ConfigService;
}
希望这会有所帮助。
答案 4 :(得分:0)
有时您在函数中丢失了一个参数,它在本地构建时可以正常工作,但对于生产构建,它会查找该参数并引发缺少参数的错误。
答案 5 :(得分:0)
这是来自我的 Angular 11 经验,尽管该解决方案可能适用于其他版本。我不小心在我的打字稿中向 onSubmit()
添加了一个参数,当时我的标记没有传递任何参数。
我所要做的就是从 onSubmit()
中删除未使用/不需要的参数。