大家好,
我希望只有在满足未知(可能很大)的条件时才显示div。类似的东西:
<div ng-if="foreach(arrayOfValues as row) row.username != ''"> nice data</div>
因此,无论何时正确填充数据并且已收到所有数据(来自多个来源),数据块都会立即出现。
提前致谢!
答案 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; }
这会返回一个真实或虚假的值。空字符串是假的,所以任何有名称的东西都会返回真值。这使得在这种情况下返回元素就足够了。
这是一个工作小提琴,有一个更新名称以显示文字的按钮