Javascript module.value未在应用程序和$provide应用程序之间更新
即使对我来说,这个问题也非常令人困惑,所以我将尽可能一步一步地简化它 1 我从应用程序开始,只需调用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
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);
});
如果多次更改存储
对象,则应首先清空该对象