如何将共享服务与不使用共享服务的控制器一起使用?

How use shared services with controllers that use no shared services?

假设有一个模块只有一个工厂(共享服务)。

angular.module('sharedService', [])
    .factory('sharedSrv', sharedService)

function sharedService() {
  var number;

  return {
    getNum: getNumber
  };

  function getNumber() {
    return number;
  }

  function setNumber(i) {
    number = i;
  }
}

我看到我们可以通过将依赖项传递到模块来注入共享服务

angular.module('app', ['sharedService'])
.controller('theCtrl', function(sharedSrv) {
  var self = this;

  self.setSharedNumber = sharedSrv.setNumber;
}

但是,如果控制器使用他自己的模块中的服务,如何注入共享服务?

angular.module('app', ['sharedService'])
.controller('theCtrl', theCtrlFun)
.service('theSrv', theSrvFun)

theCtrlFun.$inject = ['theSrv']

function theCtrlFun(localSrv) {
 // How call sharedService ? 
}

function theSrvFun() {
  // Some fantastic features.
}

感谢您的帮助。

从声明 angular.module('app', [sharedService]) 中删除 sharedService,因为您的共享服务不是此模块的一部分。

您需要在语句 theCtrlFun.$inject = ['theSrv']

中注入 theSrv 而不是 theSrvFun

theCtrlFun函数中调用这个服务的方法即可。 例如someMethod定义在theSrv服务上,你需要这样调用

theSrv.someMethod(); 

例如

angular.module('app', [])
    .controller('theCtrl', theCtrlFun)
    .service('theSrv', theSrvFun)

theCtrlFun.$inject = ['theSrv']

function theCtrlFun(localSrv) {
    theSrv.someMethod(); // calll in this way
}

function theSrvFun() {
    // Some fantastic features.
}

最好用Array Annotation定义DI

angular.module('app', [])
    .controller('theCtrl', ['theSrv', function(theSrv) {

        theSrv.callMe();

    }])
    .service('theSrv', function() {

        this.callMe = funtion() {


        }

    })

您不应该将服务模块作为变量注入,您需要将模块名称作为 string

传递
angular.module('app', [sharedService])
.controller('theCtrl', function(sharedSrv) {

应该是

angular.module('app', ['sharedService'])
.controller('theCtrl', function(sharedSrv) {

或者您可以遵循 DI 的内联数组注释

angular.module('app', ['sharedService'])
.controller('theCtrl', ["sharedSrv",  function(sharedSrv) {
    //code here
}]);

试试这个:

angular.module('app', [])
.controller('theCtrl', theCtrlFun)
.service('theSrv', theSrvFun)

theCtrlFun.$inject = ['theSrv']

function theCtrlFun(localSrv) {
 // How call sharedService ? 
 console.log(localSrv)
}

function theSrvFun() {
  // Some fantastic features.
}

plnkr: http://plnkr.co/edit/lSosJbYfG6tuF4pCXYqR?p=preview