我正在使用AngularJS 1.x,可以在同一模块中多次定义相同的服务。在以下代码片段中,我在nameService模块中两次定义了服务myApp:

(function() {
  'use strict';

  angular
    .module('myApp', [])
    .controller('MainController', MainController)
    .factory('nameService', nameService1)
    .factory('nameService', nameService2);

  MainController.$inject = ['nameService'];

  function MainController(nameService) {
    var vm = this;

    vm.message = nameService.getName();
  }

  function nameService1() {
    return {
      getName: getName
    };

    function getName() {
      return 'First Definition';
    }
  }

  function nameService2() {
    return {
      getName: getName
    };

    function getName() {
      return 'Second Definition';
    }
  }
})();

在运行时,AngularJS将使用服务的第二个实现返回的值:“第二个定义”。请检查this Plunker example

因此,从经验上讲,AngularJS似乎总是使用服务的最新定义,而忽略了先前的定义。

我的问题是:是否有任何官方文件描述此行为?

最佳答案

在这里,您正在覆盖工厂/服务的定义。 factory/service是单例,即只有一个实例。

factory('name', constructing_function)

你的情况
factory('nameService', nameService1)//Here object { getName: getName } will be assigned to nameService instance.

factory('nameService', nameService2)//Here object { getName: getName } (#2nd definition) will be assigned to nameService instance. i.e. nameservice instance referring to (#2nd definition).

09-25 17:03
查看更多