使用依赖注入时,通过引用或直接调用服务之间是否存在差异?

时间:2015-01-21 19:35:52

标签: javascript angularjs dependency-injection factory controllers

问题:

这两个使用工厂服务的例子有什么不同吗?

示例1:

angular.module('ramenBattleNetworkApp')
  .controller('MainCtrl', function ($scope, Helpers) {
     var testArray = [1,2,3,4];
     // pass Helpers to var helpers
     var helpers = Helpers;
     helpers.arrayRotate(testArray, true);
  });

示例2:

angular.module('ramenBattleNetworkApp')
  .controller('MainCtrl', function ($scope, Helpers) {
     var testArray = [1,2,3,4];
     Helpers.arrayRotate(testArray, true);
  });

厂:助手

angular.module('ramenBattleNetworkApp')
  .factory('Helpers', function () {     
    var Helpers = {};

    Helpers = {
      history: [],
      arrayRotate: function(arr, reverse){
        Helpers.history.push(arr);
        if(reverse)
          arr.push(arr.shift());
        else
          arr.unshift(arr.pop());
        return arr;
      }
    };
    return Helpers;
  });
});

为什么我想知道? 我过去曾经注意到在工厂内部调用函数并在控制器之间传递它们可能会对性能(例1)产生重大影响,而且我从未知道为什么。

虽然这个当前的例子是相形见绌的,但我假设工厂每次都会创建一个新的对象。如果多个控制器$watch()用于工厂Helpers.history的更改,则工厂是一个更大的对象;也许这就是性能受到打击的原因。最后,也许通过将其保存到控制器中的局部变量中,我可以控制

或者我不知道我在说什么。

1 个答案:

答案 0 :(得分:1)

Angular的DI系统在应用程序的任何位置注入相同的服务实例。这是一个单身人士。

因此,将服务分配给本地变量之间的性能不应有任何差异:

var helper = Helper;
helper.doSomething();

直接使用该服务:

Helper.doSomething();