如何覆盖/更改值提供程序的AngularJS值

时间:2014-11-25 09:19:11

标签: javascript angularjs angularjs-service

我想覆盖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提供者是单身,它应该改变。

1 个答案:

答案 0 :(得分:7)

请阅读有关dependency injection如何在AngularJS中工作的文档。

基本上,AngularJS应用程序分两个阶段创建 - 配置阶段运行阶段。所有配置代码,例如使用特殊.value()服务注册$provide,都是在配置阶段期间完成的。一旦该阶段结束,就不能再进行配置并开始运行阶段,其中主模块被引导到DOM,控制器和服务被实例化,等等。这允许依赖注入工作在一种理智的,确定性的方式(通过其ID请求注射总是为相同的ID返回相同的东西)。