即使对我来说,这个问题也很混乱,所以我会尽可能地逐步尝试简化它。
1
我只需拨打angular.module('app', [])
即可开始使用该应用。然后在同一设置中我添加一个值:
angular.module('app', []).value('Storage', {})
我将值设置为{}
,因为还没有要存储的内容。
2
我有一系列“init”控制器,以确保一切正确启动。在目录控制器内部,我想更新Storage
值。
我处于严格模式,所以我的设置如下:
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);
});
}
这只是直接崩溃了所有内容我得到了这个错误
Error: [$injector:unpr] http://errors.angularjs.org/1.5.7/$injector/unpr?p0=[object Object]rovideProvider%%3C-%%24provide%%3C-%CatalogInit
这几乎没有意义,因为我的所有依赖都在那里并拼写正确。所以我很茫然。谷歌一直没有帮助,因为一切都只是重复自我。
答案 0 :(得分:0)
代码有拼写错误:
function InitController($provide $q, $http){
但主要问题是$provide
不能在运行阶段使用。
虽然it is possible to use the services from config phase in run phase,但这会导致不可预见的情况。如果没有充分的理由,这应该被认为是黑客并且应该避免。
这取决于Storage
的使用方式。它可能是路线解析器。或者应该保留对象的引用:
got.then(function(data){
angular.extend(Storage, data);
});
如果Storage
对象多次更改,则应首先清空它。