AngularJS - ng-if如果有大量值

时间:2015-05-14 15:34:19

标签: javascript angularjs angularjs-ng-repeat

大家好,

我希望只有在满足未知(可能很大)的条件时才显示div。类似的东西:

<div ng-if="foreach(arrayOfValues as row) row.username != ''"> nice data</div>

因此,无论何时正确填充数据并且已收到所有数据(来自多个来源),数据块都会立即出现。

提前致谢!

2 个答案:

答案 0 :(得分:1)

只需在您的控制器中执行此操作:

.controller('myController', function($scope){

   $scope.isValid = function(){
      for(var i = 0; i < $scope.arrayOfValues.length; i++){
          if($scope.arrayOfValues.username == '') return false
      }
      return true;
   })  

})

页面上该控制器内的HTML:

<div ng-if="isValid()"> nice data</div>

请注意,调用这样的函数并不是最有效的,因为它必须在每个摘要周期执行isValid。最好$watch您的数据,并在范围内设置有效性标记。

编辑:

更好,因为您说这只是为了检查是否所有数据都已加载,请使用$q.all和数据请求在示波器上设置loaded标志。

Edit2-手表解决方案:

.controller('myController', function($scope){
   $scope.loaded = false;

   var clearWatch = $scope.$watch('arrayOfValues', function(){
      $scope.loaded = true
      for(var i = 0; i < $scope.arrayOfValues.length; i++){
          if($scope.arrayOfValues.username == ''){
              $scope.loaded = false;
              break;
          }
      }
      if($scope.loaded){
         clearWatch();
      }
   }, true)

})

答案 1 :(得分:1)

您可以使用every()方法,并传递一个简单的检查器函数,这个函数在您的范围内定义,如此。

<div ng-if="arrayOfValues.every(checkValues)"> nice data</div>

在你的控制器中,该功能只会检查每个元素

$scope.checkValues = function(element) { return element; }

这会返回一个真实或虚假的值。空字符串是假的,所以任何有名称的东西都会返回真值。这使得在这种情况下返回元素就足够了。

这是一个工作小提琴,有一个更新名称以显示文字的按钮

https://jsfiddle.net/5c88pte6/1/