2014-01-28 3 views
0

Это мой код маршрутизации:Как получить доступ к контроллеру маршрутизации в основном для вложенного контроллера в angular.js?

$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

Если вы спрашиваете о том, как кэшировать предметы и использовать их между контроллерами используют 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'); 
} 
+0

Спасибо за ваш быстрый ответ ... я пробовал ваш код .... когда я нажимаю первый раз, когда он входит в состояние, но когда я нажимаю второй раз, я не получаю предупреждения ... пожалуйста, см. мой выше код .. .i использовали концепцию $ cacheFactory вместо концепции массива – silvesterprabu

+0

@silvesterprabu, ну, если вы не получаете ни одного из предупреждений, то вы, ваш Bookctrl, даже не исполняетесь –

+0

ok ... но когда я нажимаю первый раз, когда он выполняется, второй раз также выполняется, но он не проверяет, что оператор if becz Я поставил одно предупреждение раньше этого утверждения ..... – silvesterprabu

Смежные вопросы