Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript angular$watch | | if语句在一个元素离开时未执行?_Javascript_Angularjs - Fatal编程技术网

Javascript angular$watch | | if语句在一个元素离开时未执行?

Javascript angular$watch | | if语句在一个元素离开时未执行?,javascript,angularjs,Javascript,Angularjs,我正在观察过滤的结果,若它改变了,观察正在进行循环并创建新的对象,一切正常,直到结果剩下一项 $scope.$watch('ResultOfFiltering', function(newValue, oldValue) { console.log('watch started'); if (newValue !== oldValue) { $scope.dataMap.features = $scope.ResultOfFiltering; console.log

我正在观察过滤的结果,若它改变了,观察正在进行循环并创建新的对象,一切正常,直到结果剩下一项

$scope.$watch('ResultOfFiltering', function(newValue, oldValue) {

  console.log('watch started');

  if (newValue !== oldValue) {
    $scope.dataMap.features = $scope.ResultOfFiltering;

    console.log('First Condition');

    $scope.LimitDescription = [];
    angular.forEach($scope.dataMap.features, function(value, key) {
      if (key) {
        for (var i = 0; i < $scope.dataMap.features.length; i++) {
          $scope.LimitDescription[i] = 40;

          console.log($scope.LimitDescription[i]);

        }
      }
    });
  } else {
    console.log('First Condition False');
  }
}, true);
$scope.$watch('ResultOfFiltering',函数(newValue,oldValue){
log('watch start');
如果(新值!==旧值){
$scope.dataMap.features=$scope.ResultOfFiltering;
console.log(“第一个条件”);
$scope.LimitDescription=[];
angular.forEach($scope.dataMap.features,function(value,key){
如果(关键){
对于(变量i=0;i<$scope.dataMap.features.length;i++){
$scope.LimitDescription[i]=40;
console.log($scope.LimitDescription[i]);
}
}
});
}否则{
log('First Condition False');
}
},对);
我挂载了两个控制台日志,当我在
resultofiltering
中有一项时,我在控制台中看到两个日志被激发,所以这应该意味着第一个if语句被激发为true,但它在最后一个日志
“first Condition”
时停止,if语句的其余部分没有执行
else
语句永远不会执行,所以首先
如果
语句始终为真,那么这里发生了什么

可能的原因

好的,我没有首先注意到,但问题似乎是嵌套的if(key)语句,当一个元素left key的值为0,而zero的布尔值为false时?我是对的?

这是你的问题:

if(key){
你在一个数组中循环,所以你的第一个索引是0,0是假的


我还质疑为什么在foreach循环中有for循环,而这两个循环都在同一个数组中循环。有点毫无意义……

如果触发了
console.log('First Condition')
,那么肯定会执行接下来的几行代码。您期望的结果是什么?我将console.log也放在for lop之后,但控制台中没有显示任何内容?这只是意味着不满足进入for循环的条件。使用调试器。这与角度或
$watch
无关好的,我想我知道问题出在嵌套if(key)上