我正在使用此代码:
$scope.$watch('option.sTest', function (newValue, oldValue) {
if (newValue !== undefined &&
newValue !== null &&
newValue !== oldValue) {
}
});
这使得我的代码看起来很臃肿。有没有人对我如何以另一种方式实施这些检查有任何建议?请注意,newValue或oldValue的值0
有效,因此我无法像这样检查:
$scope.$watch('option.sTest', function (newValue, oldValue) {
if (newValue && oldValue &&
newValue !== oldValue) {
}
});
答案 0 :(得分:1)
就个人而言,这不会让我感到烦恼,但如果你发现自己在整个地方使用这种模式,你总是可以编写一个函数。
function isChangedRealValue(newValue, oldValue) {
return (newValue !== undefined && newValue !== null && newValue !== oldValue)
}
然后在你的代码中:
$scope.$watch('option.sTest', function (newValue, oldValue) {
if (isChangedRealValue(newValue, oldValue) {
// code goes here
}
});
答案 1 :(得分:1)
如果您真的想将高尔夫球编码为更稀疏的线,您可以这样做:
if (~[undefined,null,oldValue].indexOf(newValue)) {
}
我不明白为什么你需要检查undefined或null - 这些不应该是你需要在监听器中处理的情况。
答案 2 :(得分:1)
尝试:
$scope.$watch('option.sTest', function (newValue, oldValue) {
if (typeof newValue !== "undefined" && newValue !== null){
}
});
当newValue
不等于oldValue
时, $ watch会触发,因此我们不需要检查newValue !== oldValue