首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >module.value不跨app更新,$provide注入中断app

module.value不跨app更新,$provide注入中断app
EN

Stack Overflow用户
提问于 2017-02-22 18:42:41
回答 1查看 18关注 0票数 0

即使对我来说,这个问题也是非常混乱的,所以我将尽可能地一步一步地简化它。

1

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

代码语言:javascript
复制
angular.module('app', []).value('Storage', {})

我将值设置为{},因为还没有什么可存储的。

2

我有一系列的"init“控制器,以确保一切都正确启动。在目录控制器中,我想更新Storage值。

我处于严格的模式,所以我的设置如下:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
angular.module('app').controller('Main', MainController);
MainController.$inject = ['Storage'];
function mainController(Storage){
    console.log(Storage) // shows an empty object still
}

这是没有意义的,所以我回到第二步,我想,如果我使用$provide服务并以这种方式获得值,那会怎么样呢?

代码语言:javascript
复制
// 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

这几乎没有意义,因为我所有的依赖项都在那里,拼写正确。所以我不知所措。谷歌也无济于事,因为一切都只是在重复它自己。

EN

回答 1

Stack Overflow用户

发布于 2017-02-22 19:41:26

代码有一个错误:

代码语言:javascript
复制
function InitController($provide $q, $http){

但是主要的问题是$provide不能在运行阶段使用。

尽管是it is possible to use the services from config phase in run phase,但这将导致无法预见的情况。如果没有很好的理由,这应该被认为是一个黑客,并被避免。

这取决于如何使用Storage。它可能是一个路由解析器。或应保留对该物体的引用:

代码语言:javascript
复制
   got.then(function(data){
       angular.extend(Storage, data);
   });

如果Storage对象被多次更改,则应该首先清空它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42399730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档