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

use*_*962 5 javascript angularjs angularjs-service

我想覆盖价值 -

angular.module("data", []).value('apiBase', '/api1/data')
Run Code Online (Sandbox Code Playgroud)

在运行时,我试图修改它 -

angular.module("data").value('apiBase', '/someotherapi/data')
Run Code Online (Sandbox Code Playgroud)

在某些服务/控制器中,但它失败了,它没有覆盖apiBase的值.

我试着注入apiBase我的控制器并进行更改.

angular.module('data').controller(function(apiBase){apiBase = '/someotherapi/data'})
Run Code Online (Sandbox Code Playgroud)

它失败了.

然后我尝试将apiBase defination更改为像这样的对象

angular.module("data", []).value('apiBase', {"api_base_url":"/api1/data"})
Run Code Online (Sandbox Code Playgroud)

然后在控制器中修改它:

angular.module('data').controller(function(apiBase){apiBase.api_base_url = '/someotherapi/data'})
Run Code Online (Sandbox Code Playgroud)

有用.所以我的问题是:为什么angular.module('data').value('samekey', 'newvalue')不能覆盖价值?当它只是一个字符串/数字(主要类型.第二次尝试)时,为什么不能修改该值.在我看来,Value提供者是单身,它应该改变.

hon*_*n2a 7

请阅读有关依赖注入如何在AngularJS中工作的文档.

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