我刚刚开始尝试从角度1迁移到2,实际上是从离子1迁移到2,而我的第一个编译错误之一是angular.isUndefined和angular.equals未解析。
我该如何解决这个问题,提示?
namespace Utils {
export class Comparator {
static isEmpty(obj:any):boolean {
return obj == null || Object.keys(obj).length === 0;
}
static isNumberNullOrZero(obj:number):boolean {
return obj == null || obj === 0;
}
static equals(obj1:any, obj2:any):boolean {
return angular.equals(obj1, obj2); // <== here angular unresolved
}
static isStringEmpty(str:string):boolean {
return !str || 0 === str.length;
}
static isStringBlank(str:string):boolean {
return !str || /^\s*$/.test(str);
}
static isBiggerThanZero(num:number):boolean {
return num != null && !angular.isUndefined(num) && num > 0; // <== here angular unresolved
}
}
}
答案 0 :(得分:3)
在您的情况下,您只需将angular.isUndefined(num)
替换为num === undefined
。
对象相等有点棘手。存在包含这种功能的库,例如, Lodash
答案 1 :(得分:2)
您可能已经修复了它,但如果您想知道为什么这些方法不在angular2 中,这就是原因。
您可能知道,框架提供的角度团队前缀对象名称为$。这是angular1中的命名约定,以避免与应用程序代码冲突。
事实证明,他们还需要实现一些像equals这样的方法来忽略那些前缀属性。这是angular.equals所做的事情之一。如果使用angular.equals比较对象,则会忽略这些前缀。
angular.equals({a: 1}, {a: 1}) === true
angular.equals({a: 1}, {a: 1, $a: 2}) === true
在此post
中查找更多内容答案 2 :(得分:0)
将angular.isUndefined
替换为isUndefined
,并为您的代码添加以下函数
```的js
function isUndefined(o) {
return typeof o === 'undefined';
}
```
答案 3 :(得分:-2)
Angular2没有isUndefined
您可以简单地用
替换angular.isUndefined(num)if (!num) {
}