- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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
.controller('HomeCtrl', function($scope, $localStorage, dataService, StorageService) {
$scope.add = function (color) {
StorageService.add(StorageService.favorites.unshift(dataService.colors.indexOf(color)));
console.log(color);
};
)};
最佳答案
您到底想用 Controller 中的线路来完成什么:
StorageService.add(StorageService.favorites.unshift(dataService.colors.indexOf(color)));
我假设您想要调用服务的 add
方法并向其传递 dataService
中 color
的值。
正如其他答案中提到的,您的错误来自于您的服务的返回 block 中未定义favorites
。但如果您确实定义了它,您仍然不会添加颜色,因为 unshift
将返回 StorageService.favorites
的新长度。
如果我的假设是正确的,你可能会想做类似的事情:
StorageService.add(dataService.colors.indexOf(color));
如果您确实需要从服务中“获取”收藏夹,请不要通过发布 $localStorage.favorites
来破坏封装,而是使用 getAll
方法来获取“收藏夹”。
附注另外,不要忘记检查 dataService 是否确实有一个颜色键,或者您是否有另一个潜在的空指针。
关于javascript - 类型错误 : Cannot read property 'unshift' of undefined AngularJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37262401/
我是一名优秀的程序员,十分优秀!