我想覆盖value-
angular.module("data", []).value('apiBase', '/api1/data')
在运行时,我尝试用 -
修改它angular.module("data").value('apiBase', '/someotherapi/data')
在某些服务/控制器中,但它失败了,它没有覆盖apiBase的值。
我尝试在控制器中注入apiBase
并进行更改。
angular.module('data').controller(function(apiBase){apiBase = '/someotherapi/data'})
失败了。
然后我尝试将apiBase定义更改为
之类的对象angular.module("data", []).value('apiBase', {"api_base_url":"/api1/data"})
然后在控制器中修改它:
angular.module('data').controller(function(apiBase){apiBase.api_base_url = '/someotherapi/data'})
有效。所以我的问题是:
为什么angular.module('data').value('samekey', 'newvalue')
无法覆盖该值?
当它只是一个字符串/数字(主要类型。第二次尝试)时,为什么不能修改该值。
在我看来Value
提供者是单身,它应该改变。
答案 0 :(得分:7)
请阅读有关dependency injection如何在AngularJS中工作的文档。
基本上,AngularJS应用程序分两个阶段创建 - 配置阶段和运行阶段。所有配置代码,例如使用特殊.value()
服务注册$provide
,都是在配置阶段期间完成的。一旦该阶段结束,就不能再进行配置并开始运行阶段,其中主模块被引导到DOM,控制器和服务被实例化,等等。这允许依赖注入工作在一种理智的,确定性的方式(通过其ID请求注射总是为相同的ID返回相同的东西)。