[英]angular js ng repeat asynchronously
我想異步顯示視圖上的元素列表。 例如,我有一個返回諾言的方法,結果將如下所示。
var result = {
books: [
{name: 'The Kite Runner', author: 'Khaled Hosseini'},
{name: 'The Book Thief', author: 'Markus Zusak'},
{name: 'A Thousand Splendid Suns', author: 'Khaled Hosseini'},
]
}
這是一個方法:
function getBooks(userId) {
return BookProduct.getBooksByUser.query({ id: userId }).$promise;
};
然后我有一個調用getBooks
的方法。
$scope.showBooks = function(userId) {
//some users id
var users_id = [1,2,3,4,5];
$scope.tables = [];
for (i = 0; i < users_id.length; i++) {
getBooks(i).then(function(result){
$scope.table = {
books = result;
}
$scope.tables.push($scope.table);
})
}
}
之后,我想使用angular ng-repeat
在視圖上向用戶顯示。
<div data-ng-repeat="table in tables">
<table>
<thead>
<tr>
<th>Name</th>
<th>Author</th>
</tr>
</thead>
<tbody>
<tr data-ng-repeat="book in table.books">
<td>{{ name }}</td>
<td>{{ author }}</td>
</tr>
</tbody>
</table>
</div>
它的工作原理很好,但是當函數NG重復將工作$scope.showBooks
執行和$scope.tables
已滿。 我正在尋找更好的解決方案。 我想在方法getBooks()
調用時在每次迭代中為用戶零碎加載書籍。
因此,在這一部分中,例如,當第一次迭代正在處理並且我得到2個元素的結果時,我將它們傳遞給視圖,用戶可以看到第一部分。 在下一次迭代中,我得到了其他3個元素,因此我將它們添加到先前的結果中並傳遞到視圖,因此用戶現在可以看到5個元素,依此類推。 我知道這對用戶幾乎是不明智的,但是如果我的服務器響應緩慢,它將幫助我變得更加用戶友好。
for (i = 0; i < users_id.length; i++) {
getBooks(i).then(function(result){
$scope.table = {
books = result;
}
$scope.tables.push($scope.table);
})
}
我不是問你如何實施它。 我只想知道是否有可能,我應該在哪里挖掘以了解更多,因為我嘗試了一些谷歌搜索,但沒有成功。
Angular具有一個循環,在該循環中它執行所有作用域功能,並且在每個“監視”循環之后,它都會對視圖進行更改。 默認情況下,Angular自動執行此操作-例如,范圍內變量的簡單更改也會重新渲染視圖。 但是在某些情況下,您可能想要攔截,因為您的操作沒有觸發重新渲染。
對於這些情況,$ apply和$ digest很有用-有關更多信息, 請參見文檔https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope#$ apply
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.