簡體   English   中英

角度js ng異步重復

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM