AngularJS 中的模块和命名空间/名称冲突

2024-03-11

考虑下面的jsfiddlehttp://jsfiddle.net/bchapman26/9uUBU/29/ http://jsfiddle.net/bchapman26/9uUBU/29/

//angular.js example for factory vs service
var app = angular.module('myApp', ['module1', 'module2']);

var service1module = angular.module('module1', []);

service1module.factory('myService', function() {
    return {
        sayHello: function(text) {
            return "Service1 says \"Hello " + text + "\"";
        },
        sayGoodbye: function(text) {
            return "Service1 says \"Goodbye " + text + "\"";
        }
    };
});

var service2module = angular.module('module2', []);

service2module.factory('myService', function() {
    return {
        sayHello: function(text) {
            return "Service2 says \"Hello " + text + "\"";
        },
        sayGoodbye: function(text) {
            return "Service2 says \"Goodbye " + text + "\"";
        }
    };
});

function HelloCtrl($scope, myService) {
    $scope.fromService1 = myService.sayHello("World");
}

function GoodbyeCtrl($scope, myService) {
    $scope.fromService2 = myService.sayGoodbye("World");
}​

我有 2 个模块(模块 1 和模块 2)。 module1 和 module2 都定义了一个名为 myService 的服务。当两个模块都导入到 myApp 中时,这似乎会在 Angular 中的 myService 上产生名称冲突。 AngularJs 似乎只是使用了第二个服务定义,而没有警告您可能出现的问题。

非常大的项目(或者只是重用一般的模块)会有名称冲突的风险,这可能很难调试。

有没有办法在名称前加上模块名称前缀,这样就不会发生名称冲突?


截至目前,AngularJS 模块不提供任何类型的命名空间来防止不同模块中的对象之间发生冲突。原因是 AngularJS 应用程序有一个注入器,它保存所有对象的名称,而不考虑模块名称。

The AngularJS 开发人员指南 http://docs.angularjs.org/guide/di says:

为了管理依赖创建的责任,每个 Angular 应用程序有一个注入器。注入器是一个服务定位器 负责构建和查找依赖关系。

正如您所提到的,将模块注入主/应用程序模块时可能会导致严重的错误。当发生碰撞时,它们会保持沉默,获胜者由最后注入的模块决定。

所以不,没有内置的方法来避免这些冲突。也许这会在未来发生。对于更可能出现此问题的大型应用程序,命名约定是最好的工具,这是正确的。考虑属于模块或功能区域的对象是否可以使用短前缀。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AngularJS 中的模块和命名空间/名称冲突 的相关文章

随机推荐

  • 在 MVC 核心中搭建控制器时未找到主键

    当尝试搭建控制器时 出现以下错误 运行选定的代码生成器时出错 实体 类型 Company Models Office 需要在以下位置定义主键 Microsoft VisualStudio Web CodeGeneration ActionI
  • OpenGL 点精灵可以在 Android 中使用吗?

    我正在 Droid 版本 2 1 update1 上进行开发 我支持的 GL 扩展包括 GL OES point sprite 和 GL OES point size array 我无法获取要渲染的点精灵 下面的代码在 glTexEnvi
  • 控制器间通信,角度方式

    我试图找出控制器 指令之间共享属性或状态的 首选 或 角度方式 有多种方法可以实现这一点 但我想遵循最佳实践 下面是一些如何实现这一点的平庸示例 1 使用 scope watch The parent controller scope an
  • 更改所有字符串属性最大长度

    在 EF 6 中我可以这样做 modelBuilder Properties Where p gt p PropertyType typeof string p GetCustomAttributes typeof MaxLengthAtt
  • Base64 值不是有效图像

    对于电子商务 我需要从 SOAP Web 服务获取产品图像 Web 服务的图像以 base64 编码 在我这边 我必须解码它们以将它们保存在 WordPress 目录中 我的所有代码都有效 即使它远非完美 唯一的问题是我无法从下面的 SOA
  • 为什么这个 Angular 应用程序无法处理用户状态(登录\退出),从而在用户登录后更改显示内容?

    我正在使用 AngularUI Angular 包 这个 https www npmjs com package firebaseui angular https www npmjs com package firebaseui angul
  • Bootstrap 4 动画列宽变化

    我有两列这样的 div class container div class row div class col 9 div div class col 3 div div div 我通过 Angular 将类名切换为col 8 offset
  • 在 Eclipse 中构建 Makefile 项目的步骤

    我正在尝试使用 Eclipse 构建一些现有软件 用 C 编写 它是使用 Makefile 构建的 为此 我在 Eclipse 中创建了一个 Makefile 项目 然而 我刚刚发现 在 C C 构建 设置 菜单中 我只看到 二进制解析器
  • 如何从 Windows 环境将 Xcode 项目添加到 Github 存储库

    看到我的问题标题后 您可能会认为以前已经问过此类问题 然而这并不重复 请阅读下面的内容来了解 我正在开发IOS应用程序 每当我有时间的时候 我都会使用图书馆的 PC 或朋友的 MacBook 来开发或更改现有项目 然后压缩该项目并将其上传到
  • 当没有数据可读取时,Socket read() 会挂起一段时间

    你好 我正在编写一个简单的 http 端口转发器 我从端口 80 读取数据 并将数据传递到端口 8080 上的 lighttpd 服务器 只要我在端口 8080 上的套接字上 write 数据 转发请求 就没有问题 但是当我从该套接字读取
  • 显示带有数据帧中的值的标签堆叠条形图

    如何显示来自数据框的堆积条形图的值 如何将标签放置在每个栏上各自部分的上方并修改字体 以便它显示为灰度图形 是有关系的对于这个问题 https stackoverflow com questions 30228069 how to disp
  • 用户注册后Django自动登录(1.4)

    我在成功注册用户时遇到问题 但是 我希望用户在注册时登录 这是代表我的注册视图的代码 关于用户不自动登录的原因有什么想法吗 Notes 用户已正确注册 之后即可登录 authenticate kwargs 返回正确的用户 在 setting
  • 即使对于简单实体,ProtoBuf 序列化也会丢失数据

    更新 1 我已将修改和修复的 演示 项目上传到https github com sidshetye SerializersCompare https github com sidshetye SerializersCompare其他人是否有
  • 如何有条件地停止 JavaScript 生成器?

    使用如下所示的迭代器 function idMaker let index 0 while index lt 3 yield index 如何确保根据情况提前停止发电机 function idMaker let index 0 while
  • Firebase 云函数错误代码和错误消息在 Android 上始终为内部

    我正在为我的应用程序开发一项功能 其中一个用户可以使用云功能向另一个用户发送通知 我的函数和通知按预期工作 但我无法以正确的方式处理错误 因为我的 Android 代码上总是出现 INTERNAL 错误 这是我的 Android 代码 pu
  • 如何获取 autoconf configure.ac 中顶级构建目录的绝对路径?

    我正在开发一个项目 该项目需要一个具有自己的 makefile 和 configure ac 的子项目 子项目是用于为主项目生成源文件的程序 有一个选项可以禁用该项目的构建并尝试使用已安装的版本 无论哪种情况 我都会创建一个在 Makefi
  • 监控显卡使用情况[关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 当我运行某个应用程序时 如何监控显卡的使用情况 我想查看我的应用程序使用 GPU 的情况 如果您在 Visual Studio 201
  • 有效的 Java 第 11 条:明智地覆盖克隆

    对于具有数组字段的类 乔什说 如果克隆方法仅返回 super clone 则生成的类实例将在原始字段中具有正确的值 但其数组字段将引用与原始类实例相同的数组 修改原始内容将破坏不变量 反之亦然 他使用了自定义 Stack 实现的示例 我使用
  • 在swift中实现HMAC和SHA1加密

    我对 Swift 比较陌生 并且一直坚持使用 HMAC 和 SHA1 进行加密 我找到了以下答案https stackoverflow com a 24411522 4188344 https stackoverflow com a 244
  • AngularJS 中的模块和命名空间/名称冲突

    考虑下面的jsfiddlehttp jsfiddle net bchapman26 9uUBU 29 http jsfiddle net bchapman26 9uUBU 29 angular js example for factory