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

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

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%3-%20url%20%3C-%20apiUrl%20%3C-% 20userService出错(本机)

并为我的英语感到抱歉。


我会这样做:

  • 如果您创建factory使用angular.module('app').factory() 。 如果您创建service使用angular.module('app').service()
  • 始终尝试使用相同的模块名称。 后来,当你有大的应用程序时,因为依赖注入,这会更容易。
  • 尝试分开保存文件,并在稍后将其连接起来,例如使用gulp gulp-concat
  • 尝试保留app.js文件中的所有配置,并且在连接文件时,请记住,此文件应该位于顶部。
  • 我会在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;
    
        }
    }());
    

    如果您有更多问题,请不要犹豫与我联系。 另外尝试角度风格指南https://github.com/johnpapa/angular-styleguide它会帮助你很多。

    链接地址: http://www.djcxy.com/p/77665.html

    上一篇: how to inject factory into another factory in Angular

    下一篇: Working with multiple factories in angular