AngularJS-您能在不修改核心源代码的情况下重命名服务吗?

AngularJS-您能在不修改核心源代码的情况下重命名服务吗?,angularjs,Angularjs,我曾经下载过一个为angular.js编写的服务,它运行得很好,但是为了方便和可读性,我更愿意在我的代码中调用它。这不是一个真正的要求,只是一个愿望 我可以在服务的实际源代码中进行修改,但这显然会导致各种各样的问题。所以我想知道,这种事情可能吗?您是否可以在应用程序中“别名”服务,以便在通过控制器时可以以不同的方式引用它?例如 正常的 目标 我试着这么做,把它赋给另一个变量,但没有用 更新 我确实做了一些工作,但我不确定这是否会产生负面影响 var app = angular.module('d

我曾经下载过一个为
angular.js
编写的服务,它运行得很好,但是为了方便和可读性,我更愿意在我的代码中调用它。这不是一个真正的要求,只是一个愿望

我可以在服务的实际源代码中进行修改,但这显然会导致各种各样的问题。所以我想知道,这种事情可能吗?您是否可以在应用程序中“别名”服务,以便在通过控制器时可以以不同的方式引用它?例如

正常的 目标 我试着这么做,把它赋给另一个变量,但没有用

更新 我确实做了一些工作,但我不确定这是否会产生负面影响

var app = angular.module('demo', [ 'ngSomethingLongAndObtuseThatIsNotNecessary' ]);

app.service('ngSmaller', function(ngSomethingLongAndObtuseThatIsNotNecessary) {
   return ngSomethingLongAndObtuseThatIsNotNecessary;
});

app.controller('HomeController', function(ngSmaller){
   ngSmaller.open();
});

您可以这样注入它,这样,数组中作为字符串的服务名称将解析为函数中属性的名称,顺序很重要

app.controller('HomeController', ['ngSomethingLongAndObtuseThatIsNotNecessary', function(shortName){
   shortName.open();
}]);
---编辑-----

或使用喷油器

var injector = angular.injector(['demo', 'ng']);
var shortName = injector.get('ngSomethingLongAndObtuseThatIsNotNecessary');

app.controller('HomeController', function(shortName){
  shortName.open();
});

您可以使用别名重新定义服务,然后在应用程序中的任何位置使用它。即使使用长名称,它也会保留相同的一个实例:

app.service("shortName", ["ngSomethingLongAndObtuseThatIsNotNecessary", function (originalService) { return originalService; }]);

app.controller("HomeController", ["shortName", function(service) {
   service.open();
}]);
类似地,您可以为整个模块别名:

angular.module("shortModuleName", ["veryVeryLoooooooooooooooooooongModuleName"]);

另一种方法是创建一个名称较小的新工厂,但使用现有服务的功能。可能有助于在不污染全局名称空间的情况下实现您想要的内容

angular.module('myApp').factory('simpleService',['IHaveAVeryLongOrConfusingName', function(foo){
  return foo;
}])

是的,但我想避免在每个控制器中都有这么长的名称。我的想法是在一个地方做这件事,而不是在任何地方重复。我将扩展我的答案,然后我在我的问题中添加了一个更新,因为我刚刚尝试了这个新技巧。这似乎确实有效,但我担心会发生比我意识到的更多的事情,结果会适得其反。哦,是的。只需在喷油器上更换即可。太好了。那正是我想要的,谢谢!被接受的答案对我不起作用。重命名服务的方法似乎不起作用。你确定它有效吗?检查这把小提琴。除非你使用工厂而不是服务,否则这个解决方案是行不通的。
angular.module("shortModuleName", ["veryVeryLoooooooooooooooooooongModuleName"]);
angular.module('myApp').factory('simpleService',['IHaveAVeryLongOrConfusingName', function(foo){
  return foo;
}])