2016-06-25 12 views
0

でアクセスすることはできません私は両方のコントローラで使用していたオブジェクトと呼ばれるブックを持っています。

IssueBookCtrlコントローラで、Booksオブジェクトを更新していて、同じオブジェクトがBookListCtrl_Librarianコントローラを使用してビューにデータを表示するために使用されています。

以下のコード行を使ってオブジェクトを更新し、BookListCtrl_Librarianコントローラを使用しているビューに更新されたオブジェクトを表示することを期待しています。

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

しかし、それは私に「例外TypeError:プロパティを取得できません 『0』未定義またはnull参照の」エラーを与える

ので要約として、私はここで$ 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'を設定するのではなく、サービスを通じて行う必要があります。 'BookData.getData()'のコードを表示します。それは何を返すのですか? – charlietfl

答えて

0

$scope.books[i]が対象ですので、あなたがindexを経由して、後でそれをアクセスできるように$rootScope.bookにそのオブジェクトを押してください。

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:オブジェクトがプロパティまたはメソッド '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(); 
} 

あなたのデータは未定義ですが、文字列 'undefined'と同等かどうかをテストしている可能性があります。

関連する問題