我对Ionic和Angular相当新,我一直在阅读,建议使用依赖注入设计模式。现在我对DI也很陌生,所以这对我来说是一个双重打击。
如果我有一个控制器,例如:
app.controller('myController', ['$scope', '$localstorage', 'myService'
function($scope, $localstorage, myService) {
// Calls function in service
myService.concatStrings();
}
我有一项服务:
app.service('myService', ['$localstorage', function ($localstorage) {
// Reads strings from local storage and concatenates them
function concatStrings () {
// ...
}
}
并说我可以从本地存储中读取这两个字符串:
var string1 = $localstorage.getStringOne();
var string2 = $localstorage.getStringTwo();
我获得这些琴弦的推荐地点在哪里?我是否在$localstorage
的控制器中获取它们并将它们传递给服务,或者我是否将任何内容传递给服务并从服务中的$localstorage
获取字符串?
我认为我实际上是从控制器中的$localstorage
读取字符串,然后将其传递给服务。这样我就可以轻松地为我的服务编写单元测试...但我不确定:\
答案 0 :(得分:1)
你可以从服务中读取字符串,只建议使用它,因为我们要将服务作为依赖项注入控制器,但反之亦然,你可以使用$ window.localStorage来存储字符串值
答案 1 :(得分:1)
服务最好用作自包含代码的可重用块。我认为应该为concatStrings()方法提供连接的字符串。如果方法是concatStringsFromLocalStorage(),则可能应该给它一些标识符来从存储中检索字符串,例如密钥或密钥列表。然后使用localStorage(服务)的代码可以知道它,而调用代码(控制器)不必使用该知识弄脏自己。
您可以轻松地重复使用代码,您可以从中获得更多的里程数。 Angular的DI,如果使用得当,通常可以很容易地编写好的测试,并且非常容易。