传递对象键作为参数检索的参数

时间:2017-03-28 14:50:05

标签: javascript angularjs angularjs-service angularjs-controller

我已经建立了一个AngularJS工厂:

angular.module('app.services', [])

.factory('StorageService', function($localStorage) {
    $localStorage.$default({
        objA : ['foo','bar'],
        objB : []
    });
    var _getByKey = function(storageItem){
        return $localStorage.storageItem;
    }

    return {
        get : _getByKey
    };

});

在我的控制器中,我正在尝试检索它:

angular.module('app.controllers', [])
.controller('testCtrl', function($scope, StorageService) {
    console.log(StorageService.get(objA));
}

我将在localStorage中存储多个对象,我希望能够灵活地通过工厂检索它们,而不是将$ localStorage依赖项与工厂一起注入。

我坚信问题在于工厂的参数传递。一些JavaScript破解我的大脑没有处理。大声笑。有任何想法吗? ^ _ ^

更新:对不起伙计们,我完全忘记了错误〜基本上,当执行此代码时,我得到“ReferenceError:objA未定义”

1 个答案:

答案 0 :(得分:2)

这里的语法不太正确。您尝试要做的是传递您要检索的属性名称;你实际做的是传递一个尚未被声明的变量。

所以你需要改变的第一部分是:

console.log(StorageService.get('objA'));

传递字符串值,而不是变量。

.get()方法中,您正在尝试根据传入的值检索属性,但您实际在做的是查找属性storageItem,该属性胜过'存在。如果要使用storageItem的值,则需要使用括号语法。

return $localStorage[storageItem];

Demo