替换 AngularJS 中的模块或服务

Replacing modules or services in AngularJS

本文关键字:服务 模块 AngularJS 替换      更新时间:2023-09-26

如何使我的依赖项可互换?假设我在模块 myDependency 中存储了一个名为 myService 的服务。我希望能够用新服务替换 myDependency 以覆盖旧服务。我想保留它,以便主应用程序仍将运行相同的服务对象变量。

我只是创建一个相同的模块来覆盖它吗?还是应该将模块引用到$variable并更改对新服务的引用?

我的主要目标只是能够包含一个新的模块javascript文件并让它覆盖旧模块。

//Main application
var app = angular.module('tswp',['myDependency'])
      .controller('MyAPP',function(myService){
           console.log(myService.run());
      }
//Old dependency
angular.module('myDependency',[])
     .service('myService',function(){
          this.run = function(){
               console.log("1")
          }
      })
//This is the new service I want to replace the old service with
angular.module('myDependency',[])
     .service('myService',function(){
          this.run = function(){
               console.log("2")
          }
      })

注射剂的标识符是唯一的。通过将源代码包含在模块(及其内容)的定义中,您可以配置全局(唯一)$provide服务。

如果使用已使用的名称定义模块,则会丢弃以前的模块配置(全部),并将其替换为新模块(请参阅说明)。仅当您真的想丢弃旧模块中定义的所有内容时,才执行此操作。

如果在两个单独的模块中定义两个同名的服务,则在构造主模块时,使用的实际配置将取决于依赖项的顺序。无论包含哪个配置,最后一个配置都将覆盖以前的配置。这样做是为了替换单个服务实现,但要注意确保重新定义确实包含在最后。

此外,您可以使用.decorator() on $provide 仅更改服务实现的特定详细信息。