![](/img/trans.png)
[英]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.