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

时间:2016-06-15 09:39:18

标签: javascript angularjs angularjs-service angularjs-module

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

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.
}

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您不应该将服务模块注入变量,您需要将模块名称传递为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
}]);

答案 1 :(得分:1)

从语句sharedService中删除angular.module('app', [sharedService]),因为您的共享服务不属于此模块。

您需要在语句theSrv

中注入theSrvFun而不是theCtrlFun.$inject = ['theSrv']

theCtrlFun函数中,只需调用此服务的方法即可。 例如,someMethod服务上定义了theSrv,您需要像这样调用

theSrv.someMethod(); 

e.g。

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() {


        }

    })

答案 2 :(得分:0)

试试这个:

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