有没有更简单的方法可以检查Angular手表的预期变化?

时间:2014-02-08 04:28:19

标签: javascript angularjs

我正在使用此代码:

    $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) {
        }
    });

3 个答案:

答案 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