gpt4 book ai didi

javascript - Angular 重复服务

转载 作者:行者123 更新时间:2023-11-30 12:49:11 26 4
gpt4 key购买 nike

假设有两个第三方 Angular 模块 Mod1.js 和 Mod2.js 它们每个都公开名为 ExpService 的服务假设一个名为 ClientMod1.js 的客户端模块需要使用来自 Mod1.js 的 ExpService,而第二个模块 ClientMod2.js 需要来自 Mod2.js 的 ExpService如果存在歧义,AngularJs 如何解决?应该如何正确使用 Mod1 和 Mod2?谢谢

最佳答案

最好的方法是创建您自己的注入(inject)器实例。当模块组合在一起时,最后一个服务将获胜 - 即,如果您有两个名为“服务”的服务,那么最后一个注册就是您将获得的实例。假设您有两个定义相同服务的模块(但实现方式不同):

var mod1 = angular.module("mod1", []);
mod1.service("service", function() {
this.echo = function(msg) {
console.log(msg);
};
});
var mod2 = angular.module("mod2", []);
mod2.service("service", function() {
this.say = function(msg) {
console.log(msg);
};
});

现在我想这样使用它:

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 的注入(inject)器并且它有效:

client1.controller("controller1", function($scope) {
$scope.text = "client1";
var service = angular.injector(["mod1"]).get("service");
service.echo("client1");
});

现在我可以引用该服务,即使它具有相同的名称。在这里工作 fiddle :http://jsfiddle.net/jeremylikness/xEt94/

关于javascript - Angular 重复服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21560117/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com