2016-06-25 6 views
0

В моем коде у меня есть 2 контроллера 1.BookListCtrl_Librarian 2.IssueBookCtrl

У меня есть объект под названием книги, которые я использую в обоих контроллерах.

Проблема, с которой я столкнулся: В контроллере IssueBookCtrl я обновляю объект Books, и тот же объект используется для отображения данных в представлении с помощью контроллера BookListCtrl_Librarian.

Я использовал ниже строки кода, чтобы обновить объект и надеяться, что он отобразит обновленный объект в представлении, использующем контроллер BookListCtrl_Librarian.

$ rootScope.books [i] .issued = true;

Но это дает мне ошибку «TypeError: Невозможно получить свойство„0“неопределенной или нулевой ссылки»

так как резюме я не в состоянии получить доступ к $ rootScope здесь.

Прошу предложить, любая помощь очень ценится.

Благодаря

Controllers.controller('BookListCtrl_Librarian', ['$scope','$http','$location','$rootScope','BookData', 
function ($scope, $http ,$location, $rootScope , BookData) { 
    $http.get('data/books.json').success(function(data) { 
    if($rootScope.books=='undefined'){ 
     $rootScope.books = BookData.getData(); 
    } 
     $scope.books = data; 
    }); 
    $scope.options = ['bookId', 'cost']; 
    //$scope.query = 'Search'; 
    $scope.issued=[]; 
    $scope.visibility=function(index) { 
     if($scope.issued[index]==false){ 
      $scope.issued[index]=true; 
      return $scope.issued[index]; 
     } 
     else{ 
      $scope.issued[index]=false; 
      return $scope.issued[index]; 
     } 

    } 
    $scope.issue = function(bookId) { 
     for (var i = 0, len = $scope.books.length; i < len; i++) { 
      if ($scope.books[i].bookId == bookId) { 
       $rootScope.book = $scope.books[i]; 
       break; 
      } 
     } 
     $location.path('/issue/'+bookId); 
    } 

     $scope.return = function (bookId) { 
      for (var i = 0, len = $scope.books.length; i < len; i++) { 
       if ($scope.books[i].bookId == bookId) { 
        $rootScope.book = $scope.books[i]; 
        break; 
       } 
      } 
      $location.path('/return/'+bookId); 
     } 
    }]); 
Controllers.controller('IssueBookCtrl', ['$scope','$rootScope','$http','$routeParams','$location', 
function ($scope,$rootScope, $http, $routeParams, $location) { 
    var Id=$routeParams.bookId; 
    $http.get('data/books.json').success(function(data) { 
     $scope.books = data; 
    }); 
    $scope.bookId=$routeParams.bookId; 
    $scope.issue = function(Id) { 
     alert("issued"); 
     for (var i = 0, len = $scope.books.length; i < len; i++) { 
      if ($scope.books[i].bookId == Id) { 
       $rootScope.books[i].issued = true; 
       $location.path('/home/librarian'); 
      } 
     } 
    } 
}]); 
+0

Этот обмен данными должен выполняться службой, а не настройкой на '$ rootScope'. Код SHOW для 'BookData.getData()'. Что он возвращает? – charlietfl

ответ

0

$scope.books[i] является объектом, так толкать этот объект в $rootScope.book, так что вы можете получить доступ к нему позже через index.

for (var i = 0, len = $scope.books.length; i < len; i++) { 
      if ($scope.books[i].bookId == bookId) { 
       $rootScope.book.push($scope.books[i]); 
       break; 
      } 
     } 
     $location.path('/issue/'+bookId); 
    } 
+0

Я получаю сообщение об ошибке «TypeError: Object не поддерживает свойство или метод« push ». Также моя проблема в IssueBookCtrl. –

+0

Значит, вы $ rootScope.variable не определяете себя на первом месте ... поэтому определите его в parentCtrl и затем получите доступ к нему в IssueBookCtrl – Thalaivar

0

Убедитесь, что BookData.getData() на самом деле вызывается. В тесте

if($rootScope.books=='undefined'){ 
    $rootScope.books = BookData.getData(); 
} 

Вы должны проверить, используя typeof. Как это:

if (typeof $rootScope.books === 'undefined') { 
    $rootScope.books = BookData.getData(); 
} 

Вполне вероятно, что ваши данные не определено, но вы тестируете равенства в строке 'не определено.

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