Javascript 角度重复服务
假设有两个第三方Angular模块Mod1.js和Mod2.js,每个模块都公开名为ExpService的服务 假设一个名为ClientMod1.js的客户端模块需要使用Mod1.js中的ExpService,第二个模块ClientMod2.js需要使用Mod2.js中的ExpService 如果存在歧义,AngularJs如何解决?应如何正确使用Mod1和Mod2?Javascript 角度重复服务,javascript,angularjs,Javascript,Angularjs,假设有两个第三方Angular模块Mod1.js和Mod2.js,每个模块都公开名为ExpService的服务 假设一个名为ClientMod1.js的客户端模块需要使用Mod1.js中的ExpService,第二个模块ClientMod2.js需要使用Mod2.js中的ExpService 如果存在歧义,AngularJs如何解决?应如何正确使用Mod1和Mod2? 谢谢您能做的最好的方法是创建自己的喷油器实例。当组合模块时,最后一个服务将获胜-即,如果您有两个名为“服务”的服务,那么最后一个
谢谢您能做的最好的方法是创建自己的喷油器实例。当组合模块时,最后一个服务将获胜-即,如果您有两个名为“服务”的服务,那么最后一个注册就是您将获得的实例。假设有两个模块定义相同的服务(但实现方式不同): 现在我想这样使用它:
var client1 = angular.module("client1", ["mod1"]);
client1.controller("controller1", function($scope, service) {
$scope.text = "client1";
service.echo("client1");
});
var client2 = angular.module("client2", ["mod2"]);
client2.controller("controller2", function($scope, service) {
$scope.text = "client2";
service.say("client2");
});
似乎合乎逻辑。但是,当我将模块注册在一起以制作如下“应用程序”时:
angular.module("myApp", ["client1", "client2"]);
发生的情况是mod2覆盖了mod1中的服务,因此client1中的调用失败。为了解决这个问题,我将client1更改为mod1的喷油器,它可以工作:
client1.controller("controller1", function($scope) {
$scope.text = "client1";
var service = angular.injector(["mod1"]).get("service");
service.echo("client1");
});
现在,我可以引用该服务,即使它具有相同的名称。这里的工作小提琴:感谢您的详细解释
client1.controller("controller1", function($scope) {
$scope.text = "client1";
var service = angular.injector(["mod1"]).get("service");
service.echo("client1");
});