我遇到了一个懒惰的书籍列表问题。最初我装了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)连接起来,它就不会改变任何东西。
感谢任何提示
答案 0 :(得分:0)
在没有看到您的代码的情况下,在查看了书籍的详细信息后,包含列表引用的控制器正在重新初始化。如果你保留它,或将书籍列表移动到寿命更长的范围,你应该没事。