javascript - 如何将共享服务与不使用共享服务的 Controller 一起使用?

标签 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;
  }
}

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

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

  self.setSharedNumber = sharedSrv.setNumber;
}

但是,如果 Controller 使用他自己的模块中的服务,如何注入(inject)共享服务?

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

theCtrlFun.$inject = ['theSrv']

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

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

感谢您的帮助。

最佳答案

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

关于javascript - 如何将共享服务与不使用共享服务的 Controller 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37831670/

相关文章:

javascript - Vue 3 : Add global method via Plugin not working

AngularJS 在其他函数之前运行服务函数

javascript - AngularJS:将 Angular 服务属性绑定(bind)到范围

javascript - 返回语句在带有 Angular 的 JavaScript 中不起作用

javascript - Protractor 中的 browser.ignoreSynchronization 是什么?

javascript - 在我的服务工厂中,我查找一个大型数据集 - 我想保留它并检查它是否存在以避免再次调用它

javascript - jquery中的反弹效果不起作用?

javascript - Canvas 不绘制图像

javascript - 使用 jquery 填充模态表单

javascript - 如何使用angularjs区分浏览器关闭和刷新?