【问题标题】:Inject Factory into Factory将工厂注入工厂
【发布时间】:2014-08-23 05:11:32
【问题描述】:

你如何让另一家工厂可以使用一家工厂?使用下面的控制台告诉我有一个错误 (injector:unpr)。

angular.module( 'fb.services', [] ).factory( 'getQueryString', function() {
    return { call: function( qs ) {
        var result = {}, queryString = qs.substring( 1 ), re = /([^&=]+)=([^&]*)/g, m;
        while ( m = re.exec( queryString ) )
            result[decodeURIComponent( m[1] )] = decodeURIComponent( m[2] );
        return result;
    }}
});

angular.module( 'fb.services', ['fb.services'] ).factory( 'getReferrer', function( getQueryString ) {
        var qry = getQueryString.call( 'query=string&this=that' );
        // fails to find getQueryString
});

【问题讨论】:

  • 你定义 fb.services 两次?!
  • 您能否就您的评论提供更多信息?
  • [] 内的依赖列表不应包含fb.services。你不能依赖自己。

标签: angularjs factory


【解决方案1】:

你只需要这样做:

angular.module( 'fb.services').factory( 'getReferrer',['getQueryString', function( getQueryString ) {
        var qry = getQueryString.call( 'query=string&this=that' );
        // fails to find getQueryString
}]);

当您在模块声明 angular.module( 'fb.services','fb.services'] ) 中使用第二个参数时,这意味着您正在使用新的依赖项再次重新定义/定义模块,这意味着之前注册的任何内容都将丢失。

在你定义了你的模块之后,你只需通过angular.module( 'fb.services') 来访问它(省略第二个参数,所以它变成了已经定义的模块的getter)

另见Dependency Injectionannotate

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2016-03-01
    相关资源
    最近更新 更多