我在Angular CLI 7应用程序中遇到了一个非常奇怪的问题,即在运行“ ng serve”时所有组件都可以正常工作。但是当运行“ ng serve --prod”时。服务或构建应用程序时没有出现任何错误。确切的问题是array.filter(x => x.id === myVariable)
我尝试使用--aot = false,--build-optimizer = false运行应用程序,似乎无济于事,并且只要将prod标志添加到服务或构建array.filter都不起作用。
这里的环境详细信息:
Angular CLI: 7.0.4
Node: 8.10.0
OS: linux x64
Angular:
Package Version
------------------------------------------------------
@angular-devkit/architect 0.10.4
@angular-devkit/core 7.0.4
@angular-devkit/schematics 7.0.4
@schematics/angular 7.0.4
@schematics/update 0.10.4
rxjs 6.3.3
typescript 3.1.3
angular.json:
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.prod.ts"
}
],
"optimization": false,
"outputHashing": "all",
"sourceMap": false,
"extractCss": true,
"namedChunks": false,
"aot": true,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"budgets": [
{
"type": "initial",
"maximumWarning": "2mb",
"maximumError": "5mb"
}
]
},
这是我的恶魔代码:
searchUser(id: number) {
const user = this.usersList.filter(x => x.id === id);
console.log(user);
return user;
}
userList是Json对象的数组,例如:
[
{id: 1, name: "John"},
{id: 2, name: "Mary"},
etc...
]
使用“ ng serve”运行应用程序时,searchUser返回正确的用户对象并将用户对象打印到控制台。
使用“ ng serve --prod”运行应用程序时,不会返回任何内容,控制台日志仅显示未定义。
由于没有明显的错误(在服务或构建过程中),我没有主意,为什么它不起作用,或者我应该更新一些软件包,等等。我可以重写那部分而不使用lambda表达式,如果这就是问题所在,但我认为应该可以。
谢谢!
答案 0 :(得分:0)
有两种可能性:
1)在使用.filter功能之前,请检查usersList是否有数据。 (可能是服务电话,处理不正确)。 2)请定义userList为数组类型:
usersList: Array<object>;
答案 1 :(得分:0)
发生这种情况的原因可能是,在访问变量时,this.usersList
为空,未定义或不是数组的值。您可以先将值转换为数组,并确保在需要时可以使用过滤器功能。
<Array>(this.usersList).filter(....)
或
<Array<object>>(this.usersList).filter(....)
此外,您可以先检查this.usersList
的值
let user;
if(Array.isArray(this.usersList)){
user = this.usersList.filter(....)
}
答案 2 :(得分:0)
哦,我犯了一个愚蠢的错误。
searchUser(id: number) {
const user = this.usersList.filter(x => x.id === id);
那是旧代码,原因稍有不同,不起作用的原因是:
searchUser(user) {
...
其中user是一个对象,我打印到控制台的user.id确实可以看到一些数字,但实际类型是字符串。因此更改为:
const user = this.usersList.filter(x => x.id === +id);
成功了。我现在可能永远记得的东西,请检查变量类型! 仍然感谢您的配合。