【问题标题】:how to inject factory into another factory in Angular如何将工厂注入Angular中的另一个工厂
【发布时间】:2016-02-09 02:31:57
【问题描述】:

我有两个模块和工厂,我需要将工厂从第一个模块实现到另一个模块。

angular.module('APIs', [])

.value  ("myValue"  , "12345")
.factory('apiUrl',['config','url',apiUrl])

function apiUrl(config,url){

}

angular.module('users.service', ['APIs'])

.factory('userService',['myValue',userService])

function userService(apiUrl,myValue){

    //login function
    function login(){
        console.log('myValue',myValue)
        console.log('loginUrl',apiUrl)
    }

    return {
        login:login

    }
}

注意:我注入 myValue 时没有问题,但在 APIs Factory 中出现问题

还有我的日志:

错误:[$injector:unpr]http://errors.angularjs.org/1.5.0/$injector/unpr?p0=urlProvider%20%3C-%20url%20%3C-%20apiUrl%20%3C-%20userService 在错误(本机)

对不起我的英语。

【问题讨论】:

标签: angularjs ionic-framework


【解决方案1】:

我会这样做:

  1. 如果您创建factory,请使用angular.module('app').factory()。如果你创建 service 使用 angular.module('app').service()
  2. 始终尝试使用相同的模块名称。由于依赖注入,以后有大型应用程序时会更容易。
  3. 尝试单独保存文件,稍后将其连接起来,例如使用gulp gulp-concat
  4. 尽量将所有配置保存在app.js 文件中,当您连接文件时,请记住,此文件应位于顶部。
  5. 我会将值和常量保留在 app.js 文件中,或者创建像 factoryservice 这样的新文件并包含它,就像我在下面注入它一样。

app.js

(function () {
    'use strict';

    var app = angular.module('app', [
        // other module
    ]);

    app.value('myValue', '12345');

    app.constant('myConst', 'some_constant');

    app.config(['$interpolateProvider', function ($interpolateProvider) {
        $interpolateProvider.startSymbol('[[');
        $interpolateProvider.endSymbol(']]');
    }]);

}());

factory.js

(function () {
    'use strict';

    angular
        .module('app')
        .factory('apiUrlFactory', apiUrlFactory);

    apiUrlFactory.$inject = [];

    function apiUrlFactory() {

        var self = this;

        self.url = 'some_url';

        return self;

    }
}());

service.js

(function () {
    'use strict';

    angular
        .module('app')
        .service('userService', userService);

    userService.$inject = ['apiUrlFactory', 'myValue'];

    function userService(apiUrlFactory, myValue) {

        var self = this;

        self.login = function () {
            console.log('myValue', myValue);
            console.log('loginUrl', apiUrlFactory.url);
        };

        return self;

    }
}());

如果您有更多问题,请随时与我联系。也可以试试 angular style guide https://github.com/johnpapa/angular-styleguide 对你有很大帮助。

【讨论】:

  • 当我使用相同的模块名称时为什么对我不起作用?
  • @nuruddin 你能创建 plunkr,它会更容易帮助你
猜你喜欢
  • 2015-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多