我想一個div只有當條件的未知(即可能很大)量滿足顯示。喜歡的東西:
<div ng-if="foreach(arrayOfValues as row) row.username != ''"> nice data</div>
因此,一旦數據被正確地填充和它的所有的情況下(這是從多個來源)數據集團出現一次。
謝謝!
我想一個div只有當條件的未知(即可能很大)量滿足顯示。喜歡的東西:
<div ng-if="foreach(arrayOfValues as row) row.username != ''"> nice data</div>
因此,一旦數據被正確地填充和它的所有的情況下(這是從多個來源)數據集團出現一次。
謝謝!
只要做到這一點在你的控制器:
.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)
})
這是全球性的我想到的。可悲的是我不能使用$ q.all,因爲我沒有真正的承諾(使用現有的服務並不總是一件好事,因爲我正在學習!)。希望能有比表現更好的東西比使用觀察者更好......無論如何,感謝您的幫助!如果沒有更好的答案出現,我會驗證這一個。 –
難道你不能使用'$ q'創建你自己的承諾,並且解決你有權訪問的任何回調? –
不是真的,它是一個擴展的工廠,從我無法進行更改的服務返回數據...並且在擴展工廠中,每個元素都是分開處理的。雖然我在下面得到了很好的答案! –
您可以使用每()方法,並傳遞在你的範圍內定義,像這樣一個簡單的檢查功能。
<div ng-if="arrayOfValues.every(checkValues)"> nice data</div>
在你的控制器,該功能將只檢查每個元素
$scope.checkValues = function(element) { return element; }
這個返回truthy或falsy值。一個空字符串是虛假的,所以任何有名字的東西都會返回一個真值。這使得在這種情況下返回足夠的元素。
這裏的工作小提琴,有一個按鈕,更新名稱顯示文本
看起來很棒!我嘗試過它,它的功能就像一個魅力。由於我對Angular還很年輕,這會損害表演嗎?如果我想在等待時顯示加載程序,我可以使用
這與我的'isInvalid'解決方案一樣低效。它(和我的)效率低下,因爲每當角度觸發一個摘要循環(使得DOM使用新的作用域值進行更新的事物)時,它必須執行掃描以查看返回的值是否已更改,一個用於更新DOM的新值。如果您使用'$ watch',然後在知道它被加載後銷燬手錶,則無需重新檢查。當然,是否足以保證採用不同的方法是一個主觀的問題。 '!..'不會影響性能。 –
從我看到的console.log中它每秒都會觸發多次!不太好,最後:/ –
爲什麼你想這樣做的HTML模板我不明白。它可以作爲一個簡單的js函數來完成,該函數將返回所有正常或中斷的真實情況並返回false。將會更加優化和更好。不要污染你的HTML這麼多請。 – theJango
我不想這樣做,只是爲了設定目標,真的:) –