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

时间:2016-05-16 20:08:04

标签: javascript angularjs local-storage ng-storage

我正在使用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);
      };
)};

2 个答案:

答案 0 :(得分:1)

你想用控制器中的线路完成什么:

StorageService.add(StorageService.favorites.unshift(dataService.colors.indexOf(color)));

我假设您要调用服务的add方法,并在color中将dataService的值传递给它。

正如在其他答案中提到的那样,您的错误来自favorites未在服务的返回区块中定义。但是如果你确定了它,你仍然不会添加颜色,因为unshift将返回新的StorageService.favorites长度。

如果我的假设是正确的,你可能想做类似的事情:

StorageService.add(dataService.colors.indexOf(color));

如果您确实需要“获取”服务中的收藏夹,请不要通过发布$localStorage.favorites来破解封装,而是使用getAll方法获取“收藏夹”。

P.S。另外,不要忘记检查dataService实际上是否有颜色键,或者您有另一个潜在的空指针。

答案 1 :(得分:0)

您可以像这样访问收藏夹数组(使用已公开的getAll函数):

    StorageService.add(StorageService.getAll.unshift(dataService.colors.indexOf(color)));