AngularJS和Ioinc项目中的依赖注入

时间:2015-08-14 06:57:26

标签: angularjs dependency-injection ionic-framework ionic

我对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读取字符串,然后将其传递给服务。这样我就可以轻松地为我的服务编写单元测试...但我不确定:\

2 个答案:

答案 0 :(得分:1)

你可以从服务中读取字符串,只建议使用它,因为我们要将服务作为依赖项注入控制器,但反之亦然,你可以使用$ window.localStorage来存储字符串值

答案 1 :(得分:1)

服务最好用作自包含代码的可重用块。我认为应该为concatStrings()方法提供连接的字符串。如果方法是concatStringsFromLocalStorage(),则可能应该给它一些标识符来从存储中检索字符串,例如密钥或密钥列表。然后使用localStorage(服务)的代码可以知道它,而调用代码(控制器)不必使用该知识弄脏自己。

您可以轻松地重复使用代码,您可以从中获得更多的里程数。 Angular的DI,如果使用得当,通常可以很容易地编写好的测试,并且非常容易。