2014-01-28 32 views
0

这是我的路由代码:如何在angular.js中访问路由控制器表单main到嵌套控制器?

$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

如果你问如何缓存项,并通过获取缓存对象

function Mainctrl() { 
    //Will be undefined if it hasnt been created yet. 
    var bookCache = $cacheFactory.get('Books'); 
} 
+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); } 

然后你可以访问缓存中的其他控制器你的快速回复...我已经尝试了你的代码....当我点击第一次它是如果条件进入,但当我点击第二次我没有得到任何警报....请参阅我的上述代码.. .i使用了你的$ cacheFactory概念,而不是数组概念 – silvesterprabu

+0

@silvesterprabu,以及如果你没有得到任何警报,那么你你的Bookctrl甚至没有执行 –

+0

好的...但是当我第一次点击它被执行,第二次也执行,但它不检查,如果语句因为我已经把一个警报之前,如果声明..... – silvesterprabu