控制器中无法访问 $rootscope
2016-06-25
175
在我的代码中,我有 2 个控制器 1.BookListCtrl_Librarian 2.IssueBookCtrl
我有一个名为 Books 的对象,我在两个控制器中都使用它。
我面临的问题是: 在 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');
}
}
}
}]);
2个回答
$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);
}
Thalaivar
2016-06-25
确保
BookData.getData()
确实被调用。在测试中
if($rootScope.books=='undefined'){
$rootScope.books = BookData.getData();
}
您应该使用
typeof
进行检查。像这样:
if (typeof $rootScope.books === 'undefined') {
$rootScope.books = BookData.getData();
}
您的数据可能未定义,但您正在测试是否与字符串“undefined”相等。
jniles
2016-06-25