在AngularJS工厂中调用对象内的函数

时间:2018-02-16 12:13:26

标签: javascript angularjs

angular.module('snswMock').factory('snswService', ['$http','$location' ,
    function ($http, $location ) {

        'use strict';

        return {

            getData: function(jsonData){

                var jsonString = JSON.stringify(jsonData);
                var serviceUrl = getServiceUrl();
                $http({
                        url: serviceUrl,
                        dataType: 'string',
                        method: 'POST',
                        data: jsonString
                    }).success(function(response){
                        alert ("Success");
                    }).error(function(error){
                        alert ("Save company!");
                    });

      },

        getServiceUrl :function(){

                    var host = $location.host();
                    if (host === 'localhost') {
                        return $location.protocol() + '://' + host + ':9000/services/insert';
                    } else {
                        return $location.protocol() + '://' + host + '/services/insert';
                    }

            }
        }
    }
]);

你对角度很新 这是我的服务

我在getServiceUrl函数内调用getData我收到以下错误

angular.js:11706 ReferenceError: getServiceUrl is not defined

任何人都可以帮助我如何调用该方法。是否有任何其他方式通过传递字符串作为发布请求来调用Web服务?

2 个答案:

答案 0 :(得分:0)

您需要使用this上下文来访问全局对象函数 - > this.getServiceUrl()。在您的情况下,myFactory是对象,在对象内部,使用this上下文可以在对象范围内全局访问所有函数。

angular.module('snswMock').factory('snswService', ['$http', '$location', function($http, $location) {

  'use strict';

  var myFactory = {

    getData: function(jsonData) {

      var jsonString = JSON.stringify(jsonData);
      var serviceUrl = this.getServiceUrl(); //modified

      $http({
        url: serviceUrl,
        dataType: 'string',
        method: 'POST',
        data: jsonString
      }).success(function(response) {
        alert("Success");
      }).error(function(error) {
        alert("Save company!");
      });

    },

    getServiceUrl: function() {

      var host = $location.host();
      if (host === 'localhost') {
        return $location.protocol() + '://' + host + ':9000/services/insert';
      } else {
        return $location.protocol() + '://' + host + '/services/insert';
      }

    }
  }

  return myFactory;
}]);

答案 1 :(得分:0)

您尝试访问此服务的控制器,请执行以下操作。

  1. 在控制器中注入此服务。

  2. 如下所示调用此服务

    snswService.getServiceUrl();