如果对象不存在,此语法或逻辑是否会在Angular.js中出错?我不断得到TypeError: Cannot read property 'timestamp' of undefined。但是我在chrome调试器中验证了其中至少有一个存在,例如sseHandler.result.httpPortResult.timestamp

$scope.$watch(function(){
             return sseHandler.result.cpuResult.timestamp ||
                 sseHandler.result.networkResult.timestamp ||
                 sseHandler.result.httpPortResult.timestamp;
}, function(){
    if (sseHandler.result.cpuResult) {
        console.log("yes");
             cpuUpdate(sseHandler.result);
    }
   });
}]);

最佳答案

只需执行$scope.$watchCollection(sseHandler.result, function() { });可能会更容易,但是我不确定这是否满足您的需求,因为它将对sseHandler.result进行任何更改,而不仅仅是时间戳。

否则,您需要检查属性是否存在,并且我怀疑您现在拥有它的方式是否会在networkResult上进行更改,就像cpuResult尚未更改一样,它将返回该更改,而angular将认为没有任何更改。所以我可能会这样做:

$scope.$watch(function(){
         var ret = '';
         if (sseHandler.result.cpuResult)
             ret += sseHandler.result.cpuResult.timestamp;
         if (sseHandler.result.networkResult)
             ret += sseHandler.result.networkResult.timestamp;
         if (sseHandler.result.httpPortResult)
             ret += sseHandler.result.httpPortResult.timestamp;
         return ret;
      }, function() {});

10-07 14:56