AngularJs延迟加载列表记住数据

时间:2015-06-05 20:31:31

标签: javascript angularjs caching lazy-loading

我遇到了一个懒惰的书籍列表问题。最初我装了10本书。如果用户向下滚动,我会加载下10本书。

让我们说用户现在正在"页面"然后他点击第35本书来获取它的细节。回到列表后,他只看到前10本书,并且必须重做所有懒惰的装载。

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

[UPDATE] 谢谢你的回复!

路由

.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);

    }

}

控制器的语法可能是一个问题吗?或者我如何延长scope / vm对象的生命周期?

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

感谢任何提示

1 个答案:

答案 0 :(得分:0)

在没有看到您的代码的情况下,在查看了书籍的详细信息后,包含列表引用的控制器正在重新初始化。如果你保留它,或将书籍列表移动到寿命更长的范围,你应该没事。