[英]Cannot read property 'unshift' of undefined while trying to unshift a json object
[英]TypeError: Cannot read property 'unshift' of undefined AngularJS
我正在使用ngStorage(localStorage)处理这个新的AngularJS项目,但不确定为什么我会在下面收到消息。 每当我点击添加按钮时,我都会收到此消息。
TypeError: Cannot read property 'unshift' of undefined AngularJS
下面是我的代码。 有人可以解释为什么会发生此错误吗?
.factory ('StorageService', function($localStorage) {
$localStorage = $localStorage.$default({
favorites: []
});
var _getAll = function () {
return $localStorage.favorites;
};
var _add = function (color) {
$localStorage.favorites.unshift(color);
}
var _remove = function (color) {
$localStorage.favorites.splice(index, 1);
}
return {
getAll: _getAll,
add: _add,
remove: _remove
};
})
控制者
.controller('HomeCtrl', function($scope, $localStorage, dataService, StorageService) {
$scope.add = function (color) {
StorageService.add(StorageService.favorites.unshift(dataService.colors.indexOf(color)));
console.log(color);
};
)};
您到底想用控制器中的一行来完成什么:
StorageService.add(StorageService.favorites.unshift(dataService.colors.indexOf(color)));
我假设您想调用服务的add
方法,并在dataService
中将color
的值传递给它。
如其他答案所述,您的错误来自于未在服务的返回块中定义的favorites
。 但是,如果您确实定义了它,您仍然不会添加颜色,因为unshift
将返回StorageService.favorites
的新长度。
如果我的假设是正确的,则可能需要执行以下操作:
StorageService.add(dataService.colors.indexOf(color));
如果确实需要从服务中“获取”收藏夹,请不要通过发布$localStorage.favorites
破坏封装,而应使用getAll
方法获取“收藏夹”。
PS另外,请不要忘记检查dataService是否确实具有颜色键,或者您还有另一个潜在的空指针。
您可以像这样访问收藏夹数组(使用已经公开的getAll函数):
StorageService.add(StorageService.getAll.unshift(dataService.colors.indexOf(color)));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.