0

我已經建立了一個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破解我的大腦沒有處理。大聲笑。有任何想法嗎?^_^

UPDATE:對不起球員,我完全忘記了錯誤〜基本上,執行該代碼時,我得到「的ReferenceError:objA沒有定義」

+1

嘗試返回{ 得到:_getByKey };它看起來好像你的代碼中有一個類型錯誤 – boroboris

+0

你提到將有幾個對象存儲,我看不到每個對象的名字是可持續的:'StorageService.get(objA)'除非你有辦法保留跟蹤所述對象。在你的工廠設計中也許要記住。 – Jax

+0

@boroboris對不起,確實是was_getByKey,我錯誤地輸入了問題..但這不是修復.. :( – Aftab

回答

2

你這裏的語法是不完全正確。你在試圖要做的是通過你想要檢索的屬性名稱;你在做什麼做的是傳遞一個尚未聲明的變量。

所以,你需要改變第一部分是:

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

傳遞一個字符串值,而不是一個變量。

在您的.get()方法中,您試圖根據傳入的值檢索屬性,但實際上您在查找屬性storageItem,該屬性不存在。如果要使用storageItem的值,則需要使用括號語法。

return $localStorage[storageItem]; 

Demo

+0

非常感謝!實際上工作!主要問題確實是變量vs屬性。在思考localStorage被保留爲對象的邊緣,並且可以使用javascript-dot-notation進行檢索。謝謝你,先生!現在完全正常工作〜 – Aftab