2016-05-16 4 views
0

Я работаю над этим новым проектом AngularJS с ngStorage (localStorage) и не совсем уверен, почему я получаю сообщение ниже. Я получаю это, когда я нажимаю кнопку добавления.ТипError: Не удается прочитать свойство «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 не существует. –

+1

StorageService выставляет только, Что возвращается (GETALL, добавлять, удалять) – 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 есть клавиша цветов, или у вас есть другой потенциальный нулевой указатель.

+0

с этой строкой кода Я хочу, чтобы пользователь мог добавить цвет в «избранное». Вы правы, я передаю ему значение цвета в dataService (где все цвета). – JBlaze321

+0

Я смущен тем, как я должен использовать getAll сейчас – JBlaze321

+0

Вам не нужно использовать getAll в методе добавления. Просто назовите это, как я описал. Он должен работать. То, что я хотел сказать с замечанием о getAll, заключается в том, что вам не нужно добавлять фаворитов к вашему сервису, как это предлагается в комментариях к вашему вопросу. –

 Смежные вопросы

  • Нет связанных вопросов^_^