繁体   English   中英

TypeError:无法读取未定义的AngularJS的属性“ unshift”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM