我有一种情况,我已经为angular.js
下载了一个书面服务,但它运行正常 - 但我希望在代码中调用一些不同的东西只是为了方便和可读性。这不是一个真正的要求,只是一种愿望。
我可以在服务的实际源代码中进行更改,但这显然会导致各种问题。所以我想知道,这种事情有可能吗?你可以别名'您的应用程序中的服务,以便在您通过控制器传递它时可以使用不同的服务?例如......
var app = angular.module('demo', [ 'ngSomethingLongAndObtuseThatIsNotNecessary' ]);
app.controller('HomeController', function(ngSomethingLongAndObtuseThatIsNotNecessary){
ngSomethingLongAndObtuseThatIsNotNecessary.open();
});
var app = angular.module('demo', [ 'ngSomethingLongAndObtuseThatIsNotNecessary' ]);
var smallerName = ngSomethingLongAndObtuseThatIsNotNecessary;
app.controller('HomeController', function(smallerName){
smallerName.open();
});
我尝试过这样做,将它分配给另一个变量,但它没有用。
我确实做了某事工作,但我不确定这是否会产生不良后果。
var app = angular.module('demo', [ 'ngSomethingLongAndObtuseThatIsNotNecessary' ]);
app.service('ngSmaller', function(ngSomethingLongAndObtuseThatIsNotNecessary) {
return ngSomethingLongAndObtuseThatIsNotNecessary;
});
app.controller('HomeController', function(ngSmaller){
ngSmaller.open();
});
答案 0 :(得分:3)
你可以像这样注入它,这样服务名称作为数组中的字符串将被解析为函数中的属性名称,ORDER很重要
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();
});
答案 1 :(得分:2)
您可以使用别名重新定义服务,然后在应用程序的任何位置使用它。即使您使用长名称,它甚至会保持相同的一个实例:
app.service("shortName", ["ngSomethingLongAndObtuseThatIsNotNecessary", function (originalService) { return originalService; }]);
app.controller("HomeController", ["shortName", function(service) {
service.open();
}]);
同样,您可以为整个模块添加别名:
angular.module("shortModuleName", ["veryVeryLoooooooooooooooooooongModuleName"]);
答案 2 :(得分:2)
另一种方法可以是创建一个名称较小但使用现有服务功能的新工厂。可能有助于实现您的需求而不会污染全局命名空间。
angular.module('myApp').factory('simpleService',['IHaveAVeryLongOrConfusingName', function(foo){
return foo;
}])