考虑以下jfiddle
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个模块(module1和module2)。module1和module2都定义了一个名为myService的服务。当两个模块都导入myApp时,这似乎在Angular中的myService上创建了名称冲突。看来AngularJs仅使用第二个服务定义,而没有警告您可能的问题。
非常大的项目(或通常只是重用模块)将具有名称冲突的风险,这可能很难调试。
有没有一种方法可以在模块名称前添加名称,以免发生名称冲突?
到目前为止,AngularJS模块不提供任何类型的命名空间,以防止不同模块中的对象之间发生冲突。原因是AngularJS应用具有单个注入器,该注入器保存所有对象的名称,而与模块名称无关。
该AngularJS开发指南说:
为了管理依赖关系创建的责任,每个Angular应用程序都有一个注入器。注入程序是一个服务定位器,负责构造和查找依赖项。
正如您已经提到的,将模块注入您的主/应用程序模块时可能会导致讨厌的错误。发生碰撞时,它们将保持沉默,而获胜者则取决于最后注入的模块。
因此,没有避免这种冲突的内在方式。也许将来会发生。对于更容易出现此问题的大型应用程序,您是正确的,命名约定是您的最佳工具。考虑属于模块或功能区域的对象是否可以使用短前缀。
在OpenFOAM中,存在一个函数,其名称为exp,表示数学中的幂操作。同时,C++本身也可以进行这个计算,并且函数名称也为exp。这会导致调用的时候,编译器并不知道应该调用OpenFOAM的exp还是C++本身的exp。一种方法是将其中一个exp函数进行改名,比如将OpenFOAM中的exp改成expFoam。但还有更简单的方式。 名称空间专门用于解决上面的问题,它可作为附加信息来区分不同库中相
我只是用MVVM轻型工具包编写一些培训窗口项目。当MVVM Light引用添加到项目中时,下面的资源被自动添加到app.xml中 不幸的是,它不起作用,即由于以下错误,无法构建/编译项目: 我找到了几种针对此问题的常见解决方案(例如:更改解决方案平台、清理、重建、重新启动Visual Studio等),但它们并没有改变什么。创建一个新项目也没有帮助。 有没有其他办法让它起作用?我使用Visual
我正在尝试将一个基于PHP的API从共享主机移植到Google应用程序引擎。我下载了PHPSDK,在启动器中创建了一个新的应用程序,在PHP中启用了cURL。ini(使用),现在我得到这个错误: 如果我向curl_init()添加反斜杠(告诉它不要使用MyNamespace),我会得到这个: 除了启用cURL_lite()(稍后我可能会解决这个问题,因为它不支持我需要的cURL选项),我如何解决这
目前,我们有一个使用代码欺骗2.0.16构建的大型接受套件。我们想升级到代码欺骗2.2.5。然而,在安装了Codec0019 2.2.5(via phar)之后,我们根本无法运行我们的测试套件。 我们收到的错误是(底部的其他详细信息): 无法找到并加载[Codeception\Exception\ConfigurationException]模块WebHelper 显然,新版本的加载更改会影响我们
我对C++不是很熟悉,这是我第一次使用的不仅仅是名称空间std。下面的有什么区别? VS 在这两个之后,我现在似乎可以创建一个MyClass对象了。一种方式比另一种好吗?另外,如果我都不这样做,我还可以通过每次需要时在MyNamespace::MyClass之前附加MyClass来引用MyClass吗? 接下来,如果我使用第二个选项转发declare,我还需要吗?在我(不是很好)的理解中,在C++
谢谢你抽出时间。 问候,