无法通过AngularJs中的指令从工厂访问函数

时间:2017-07-31 16:05:29

标签: angularjs

/ TypeError:无法读取未定义的属性“getToken” / 我试图调用工厂函数中定义的getToken函数。

指令和工厂都在单独的.js文件中 但它抛出一个错误,无法访问该功能。

angular.module('pesaveWeb')
  .directive('goals', function goalsDrctv ($timeout) {
    'use strict';
    return {
      restrict: 'E',
      replace: true,
      scope: true,
      templateUrl: "js/directives/goals.tmpl.html",
      controllerAs: 'savings',
      controller: function ($routeParams, $scope, 
       savingsFactory,tokenFactory) {

        this.message = {};

        var token=tokenFactory.getToken();
        var getGoals = savingsFactory.getGoals(token);
        if (getGoals) {
          getGoals.then( angular.bind(this, function (response) {
            savingsFactory.message = response;
            this.message = savingsFactory.message;
             alert(JSON.stringify(this.message));  

          }) );
        }
      }

    }
  });



angular.module('pesaveWeb').factory('tokenFactory', function tokenFactory ($http,$routeParams) {
    'use strict';
    var obj = {};


    obj.getToken = function () {

        return $http({
          method: 'POST', 
          url: "../api/v1/getToken", 
          headers : {
                    'Content-Type':'application/json',
                    'X-API-KEY':'04g4g00c04ks4sokgkoosg0kwww0cww4www0kc80',
                    'Authorization':"Basic cGVzYXZlQXBwOkNDNTVzV0FwUW0zYWxpazlLNTcwTTFXQ1RNOUJ1TmZS"
                },
          data: {"grant_type":"client_credentials"}
        }) .success(function (data) {


          })
          .error(function (data) {
          });

    };

  });

1 个答案:

答案 0 :(得分:0)

您的工厂函数需要返回用于绑定函数的obj

angular.module('pesaveWeb').factory('tokenFactory', function tokenFactory ($http,$routeParams) {
    'use strict';
    var obj = {};


    obj.getToken = function () {

        return $http({
          method: 'POST', 
          url: "../api/v1/getToken", 
          headers : {
                    'Content-Type':'application/json',
                    'X-API-KEY':'04g4g00c04ks4sokgkoosg0kwww0cww4www0kc80',
                    'Authorization':"Basic cGVzYXZlQXBwOkNDNTVzV0FwUW0zYWxpazlLNTcwTTFXQ1RNOUJ1TmZS"
                },
          data: {"grant_type":"client_credentials"}
        }) .success(function (data) {


          })
          .error(function (data) {
          });

    };
    return obj;
  });

另外,另一个潜在的问题是getToken()函数可能无法正常工作。你应该使用"承诺"使用Angular的getToken()服务解析$q函数中令牌的价值。查看其documentation here