这是我的路由代码:
$routeProvider
.when('/', 'main')
.when('/books','main.book')
.segment('main', {
templateUrl:'templates/main.html',
controller:MainCtrl})
.within()
.segment('book', {
templateUrl:'templates/book.html',
controller:BookCtrl
})
这些是控制器:
function Mainctrl()
{
},
function Bookctrl($http,$cacheFactory)
{
var bookCache = $cacheFactory('Books');
var book = bookCache.get("BookName");
if(!book){
alert("first time");
var data=[{"name":"1"},{"name":"2"},{"name":"3"}];
bookCache.put("BookName",data);
} else {
alert("second time");
alert(book);
}
}
首先我正在加载main.html
页面。它有一个嵌套视图,并有一个按钮(书)。当用户点击该按钮时,我只是将book.html
加载到该嵌套视图中,然后在BookCtrl
函数中,我向服务器发送请求以从服务器获取数据。我收到了回复,并显示了所有正常工作的数据。但是每当我向服务器发送请求时单击该按钮。所以我没有计划在第一次点击时将所有数据保存在数组中。我已经尝试过使用上面的代码,但是当我第一次点击时,数组是空的,所以它将数据推入数组,但是当我再次点击时它没有显示任何内容。这意味着我没有得到任何警报。我做错了什么?
答案 0 :(得分:0)
如果您询问如何缓存项目并在控制器之间使用它们,请使用cacheFactory
var bookCache = $cacheFactory('Books');
...
var book = bookCache.get("BookName")
//book will be undefined if not cached
if(!book){
//do request to get book
$http.getJSON(url,function(data)
{
var book = {name:data.name,isbn:data.isbn};
//then save it
bookCache.put("BookName",);
//do something with it
showBook(book);
});
} else {
//book was cached, do something with it
showBook(book);
}
然后,您可以通过获取缓存对象
来访问其他控制器中的缓存function Mainctrl() {
//Will be undefined if it hasnt been created yet.
var bookCache = $cacheFactory.get('Books');
}