在工厂内创建动态工厂

时间:2016-04-23 09:47:44

标签: javascript angularjs

我正在尝试动态创建一些角度服务(我使用js-data作为orm,并希望能够动态注册模型)

我必须遗漏一些基本的东西,因为这个代码确实有用,当我预期它会;)

angular.module('myApp',['ui.router','ngResource', 'js-data'])

angular.module('myApp')
    .factory('storeService', storeService)

/** @ngInject */
function storeService($injector) {

    // "dynamically" create a new factory
    angular.module('myApp').factory("foobar2", function() {
        return function() {
            return "foobar2";
        }
    });

    console.log($injector.get('foobar2'));        
}

所以此时我收到错误

“angular.js:13550错误:[$ injector:unpr]未知提供商:foobar2Provider< - foobar2”

是什么给出的? .factory不会立即创建服务吗?

这是我试图做的简化版本 - 实际代码将是参数化调用,而不是现在的硬编码。但是,这个简化的版本很好地突出了我的误解;)

更新#1

如果我将foobar2工厂移到storeService之外,那么代码现在看起来像这样..

angular.module('myApp',['ui.router','ngResource', 'js-data'])

// "dynamically" create a new factory
angular.module('myApp').factory("foobar2", function() {
    return function() {
        return "foobar2";
    }
});

angular.module('myApp')
    .factory('storeService', storeService)

/** @ngInject */
function storeService($injector) {

    console.log($injector.get('foobar2'));        
}

然后一切正常 - 所以一定是因为foobar2工厂的创建发生在storeService中。

我是否刚刚遇到“竞赛”状态,在我调用$进样器之前工厂尚未设置?

更新#2

我创造了一个显示“问题”的小提琴

https://jsfiddle.net/j1j9uctd/

0 个答案:

没有答案