Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度重复服务_Javascript_Angularjs - Fatal编程技术网

Javascript 角度重复服务

Javascript 角度重复服务,javascript,angularjs,Javascript,Angularjs,假设有两个第三方Angular模块Mod1.js和Mod2.js,每个模块都公开名为ExpService的服务 假设一个名为ClientMod1.js的客户端模块需要使用Mod1.js中的ExpService,第二个模块ClientMod2.js需要使用Mod2.js中的ExpService 如果存在歧义,AngularJs如何解决?应如何正确使用Mod1和Mod2? 谢谢您能做的最好的方法是创建自己的喷油器实例。当组合模块时,最后一个服务将获胜-即,如果您有两个名为“服务”的服务,那么最后一个

假设有两个第三方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");
});