簡體   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