即使对我来说,这个问题也是非常混乱的,所以我将尽可能地一步一步地简化它。
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
这几乎没有意义,因为我所有的依赖项都在那里,拼写正确。所以我不知所措。谷歌也无济于事,因为一切都只是在重复它自己。
发布于 2017-02-22 19:41:26
代码有一个错误:
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对象被多次更改,则应该首先清空它。
https://stackoverflow.com/questions/42399730
复制相似问题