Javascript module.value未在应用程序和$provide应用程序之间更新

Javascript module.value未在应用程序和$provide应用程序之间更新,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,即使对我来说,这个问题也非常令人困惑,所以我将尽可能一步一步地简化它 1 我从应用程序开始,只需调用angular.module('app',[])。然后在相同的设置中,我添加一个值: angular.module('app', []).value('Storage', {}) 我将该值设置为{},因为还没有要存储的内容 2 我有一系列的“init”控制器来确保一切正常启动。在目录控制器内,我要更新存储值 我处于严格模式,因此我的设置如下: angular.module('app').cont

即使对我来说,这个问题也非常令人困惑,所以我将尽可能一步一步地简化它

1

我从应用程序开始,只需调用
angular.module('app',[])
。然后在相同的设置中,我添加一个值:

angular.module('app', []).value('Storage', {})
我将该值设置为
{}
,因为还没有要存储的内容

2

我有一系列的“init”控制器来确保一切正常启动。在目录控制器内,我要更新
存储

我处于严格模式,因此我的设置如下:

angular.module('app').controller('Init', InitController);

InitController.$inject = ['Storage', '$q', '$http'];

function InitController(Storage, $q, $http){
   var getDeferred = $q.defer();
   var got = getDeferred.promise;

   $http({
       // some code to do stuff
   }).then(function(data){
       getDeferred.resolve(data);   
   });
   got.then(function(data){

       // then I should I be able to update and set the new value here
       Storage = data; // thats what everything online showed me
   });
}
3

我有我的主控制器,我做我的正常注射什么的:

angular.module('app').controller('Main', MainController);
MainController.$inject = ['Storage'];
function mainController(Storage){
    console.log(Storage) // shows an empty object still
}
这没有意义,所以我回到第二步,很好地考虑了如果我使用
$provide
服务并以这种方式获得值,应该可以工作是吗

// Step 2 revised
angular.module('app').controller('Init', InitController);

InitController.$inject = ['$provide', '$q', '$http'];

function InitController($provide $q, $http){
   var getDeferred = $q.defer();
   var got = getDeferred.promise;

   $http({
       // some code to do stuff
   }).then(function(data){
       getDeferred.resolve(data);   
   });
   got.then(function(data){

       // tried to set it up a new way
       $provide.value('Storage', data);
   });
}
这直接破坏了一切,我得到了这个错误

错误:[$injector:unpr]http://errors.angularjs.org/1.5.7/$injector/unpr?p0=[object-object]rovideProvider%%3C-%%24提供%%3C-%CatalogInit

这几乎没有什么意义,因为我所有的依赖项都在那里并且拼写正确。所以我不知所措。谷歌也帮不上忙,因为一切都在重复

代码有一个输入错误:

function InitController($provide $q, $http){
但主要问题是,
$provide
不能在运行阶段使用

尽管如此,这将导致不可预见的情况。如果没有充分的理由,这应该被认为是一种黑客行为,应该避免

这取决于
存储
的使用方式。它可能是路由解析程序。或应保留对对象的引用:

   got.then(function(data){
       angular.extend(Storage, data);
   });
如果多次更改
存储
对象,则应首先清空该对象