AngularJs的延迟加载列表记住数据

AngularJs lazy loaded list remember data

本文关键字:数据 列表 延迟加载 AngularJs      更新时间:2023-09-26

我遇到了一个加载图书列表太慢的问题。最初我加载了10本书。如果用户向下滚动,我将加载接下来的10本书。

假设用户现在在"page"4上。然后他点击了第35本书来获取它的细节。在返回到列表后,他只看到前10本书,并且必须重做所有的惰性加载。

是否有任何"缓存"或存储的可能性来避免这种情况?非常感谢你的提示!

(更新)

谢谢你的回复!

<

路线/strong>

.state('app.books.list',{
    ...
    ...
    resolve: {
        books : function(bookFactoryBook) {
           return booksFactoryBook.getList({page : 1});
        }
    }
})
.state('app.books.details',{
    // just loads detail
})

ctrl(控制器作为语法)

function bookControllerList(_books, ....) {
     vm = this;
     vm.books = _books;
     ......
     // lazy loader just appends new data on vm.books
     // after loading was successful
    /**
     * init lazy loader
     *
     * @desc    initialize lazy-loader for books
     * @return  {void}
     * @private
     */
    function _initLazyLoader() {
        if(_isLazyLoadingEnabled() === false) {
            return;
        }
        // config lazy loader
        var mapper = {
            data            :   'books', // vm.books
            isEnabled       :   'lazyLoadingEnabled',
            indicatorId     :   'lazyLoadingIndicatorId',
            onDataLoaded    :   _afterLazyLoading
        };
        if(booksFactoryLazyLoader.setup(vm, mapper) === false) {
            // failed to initialize lazy loader - disable feature
            vm.lazyLoadingEnabled = false;
        } else {
            vm.lazyLoadingEnabled = true;
        }
    }
    /**
     * after lazy loading
     *
     * @desc    manages data manipulation after lazy loading
     * @param   books       -   {Array} -   new loaded data to manipulate
     * @return  {void}
     * @private
     */
    function _afterLazyLoading(books) {
        // user logged in?
        if(authFactorySession.isAuthorized() === true) {
            // try to flag favorites in received books
            books = _addFavoriteFlags(books);
        }
        // append data to vm
        vm.books = vm.books.concat(books);
    }
}

可能是控制器语法的问题吗?或者如何延长作用域/vm对象的生命周期?

如果我改变状态的顺序,并将它们连接为父/子(app.books。List和app.books.list.detail)不会改变任何东西。

谢谢你的提示

在看不到代码的情况下,包含列表引用的控制器在查看图书的详细信息后被重新初始化。如果你把它保留下来,或者把书的列表移到一个有更长的寿命的范围,你应该没问题。