2016-05-16 5 views
0

私はこの新しいAngularJSプロジェクトでngStorage(localStorage)を使用していますが、なぜ私は以下のメッセージが表示されているのかよくわかりません。私は追加ボタンをクリックするたびにこれを取得します。TypeError:undefinedのunshiftプロパティを読み取ることができません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); 
     }; 
)}; 
+1

StorageServiceには「お気に入り」というプロパティはありません。戻りオブジェクトに追加します。 –

+0

localStorage.favoritesが存在しないためです。リターン{ のgetAll:_getAll、 追加:_ADD、 削除:_REMOVE、StorageService:$ localStorage.favorites } –

+1

StorageServiceは – sam1188

答えて

0

次のようなお気に入りの配列(既に公開されたのgetAll機能を使用)にアクセスすることができます:あなたが達成しようとしている正確にどのような

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

をあなたのコントローラーのラインで:

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

サービスのaddメソッドに電話し、colorの値をdataServiceに渡します。

他の回答と同じように、お客様のサービスの戻りブロックにはfavoritesが定義されていません。しかし、それを定義すると、unshiftは新しい長さStorageService.favoritesを返すので、まだ色を追加しません。

私asumptionあなたはおそらくのような何かをしたいと思う正しい場合:あなたはあなたのサービスからお気に入りを「取得」する必要がある場合

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

を、出版してカプセル化を壊しません$localStorage.favoritesしかし、あなたのgetAllメソッドを使用して「お気に入り」を取得してください。

P.S.また、dataServiceが実際に色のキーを持っているか、別の潜在的なNULLポインタがあることを確認することを忘れないでください。

+0

を使用すると、ユーザーは「お気に入り」に色を追加することができます。あなたは正しいです私はdataService(すべての色がある)の色の値を渡しています。 – JBlaze321

+0

getAllの使い方が混乱しています – JBlaze321

+0

addメソッドでgetAllを使う必要はありません。私が説明したようにそれを呼び出すだけです。それは動作するはずです。私がgetAllに関する発言で言ったことは、あなたの質問へのコメントに示唆されているように、あなたのサービスにお気に入りを追加する必要はないということです。 –

関連する問題