如何从 AngularJS 中的服务调用工厂

How to call a factory from a service in AngularJS

本文关键字:服务 调用 工厂 AngularJS      更新时间:2023-09-26

我有一个使用Yeoman设置的AngularJS应用程序。在应用程序中,我需要在HTTP Basic Authentication后面进行 API 调用。我按照本教程弄清楚如何修改我的 HTTP 标头并对 uername 和密码进行编码。但是,我无法弄清楚如何从我的 API 服务调用Base64.encode。我尝试过的一切总是给我ReferenceError: Base64 is not defined错误。

我的 API 服务,Base64.encode()是引发错误的行:

// app/scripts/api.js
angular.module('api.ClientApp', ['base64']).
    service('$api', function($http, $q, $cookieStore, $rootScope, $location, $window, $sniffer) {
        var $api = this;
        this.set_http_auth = function(obj) {
            if(obj){
                $http.defaults.headers.common['Authorization'] = 'Basic ' +
                    Base64.encode(obj.username + ':' + obj.password);
            } else {
                delete $http.defaults.headers.common['Authorization'];
            }
        };
    });

基地64工厂:

// app/scripts/services/Base64.js
angular.module('base64', [])
    .factory('Base64', function () {
        return {
            encode: function (input) {
                var output = "";
                // ...
                return output;
            },
            decode: function (input) {
                var output = "";
                // ...
                return output;
            }
        };
    });

索引.html:

<!-- app/index.html -->
<script src="scripts/app.js"></script>
<script src="scripts/services/Base64.js"></script>
<script src="scripts/api.js"></script>
<script src="scripts/controllers/signin.js"></script>

在这一行中

service('$api', function($http, $q, $cookieStore, $rootScope, $location, $window, $sniffer) {

您需要注入 Base64 服务 - 即

service('$api', function($http, $q, $cookieStore, $rootScope, $location, $window, $sniffer, Base64) {