如何将工厂注入Angular的另一家工厂

时间:2016-02-08 16:50:43

标签: angularjs ionic-framework

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

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时没问题,但是API Factory中的问题

和我的日志:

  

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

抱歉我的英语。

1 个答案:

答案 0 :(得分:0)

我会这样做:

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

    如果您有更多问题,请随时与我联系。同时尝试角度风格指南https://github.com/johnpapa/angular-styleguide它会对你有很大的帮助。