如何在angular.js中访问路由控制器从main到嵌套控制器?

时间:2014-01-28 14:57:42

标签: javascript jquery angularjs

这是我的路由代码:

$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函数中,我向服务器发送请求以从服务器获取数据。我收到了回复,并显示了所有正常工作的数据。但是每当我向服务器发送请求时单击该按钮。所以我没有计划在第一次点击时将所有数据保存在数组中。我已经尝试过使用上面的代码,但是当我第一次点击时,数组是空的,所以它将数据推入数组,但是当我再次点击时它没有显示任何内容。这意味着我没有得到任何警报。我做错了什么?

1 个答案:

答案 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');
}