Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angularjs在一个或多个工厂内使用工厂值_Javascript_Angularjs - Fatal编程技术网

Javascript Angularjs在一个或多个工厂内使用工厂值

Javascript Angularjs在一个或多个工厂内使用工厂值,javascript,angularjs,Javascript,Angularjs,嗨,我正在用angularjs开发web应用程序。我有一个java脚本文件和两个工厂,它们对web api进行http调用。我想在另一个工厂中使用一个工厂值输出。下面是我的第一家工厂 myapp.factory('sadadpaymentapi', ['$http', '$cookieStore', 'cfg', 'ScrollFunction', 'leaselisting','$q', function ($http, $cookieStore, cfg, ScrollFunction, l

嗨,我正在用angularjs开发web应用程序。我有一个java脚本文件和两个工厂,它们对web api进行http调用。我想在另一个工厂中使用一个工厂值输出。下面是我的第一家工厂

myapp.factory('sadadpaymentapi', ['$http', '$cookieStore', 'cfg', 'ScrollFunction', 'leaselisting','$q', function ($http, $cookieStore, cfg, ScrollFunction, leaselisting,$q) {
    var sadadpaymentapiobject = {};
    var baseurl = cfg.Baseurl;
    var LoginID = $cookieStore.get("LoginID");
    var cookiePreferredLanguage = $cookieStore.get('PreferredLanguage');
    var urlapi = baseurl + "api/ServiceRequest/CreateRSSedad/";
    sadadpaymentapiobject.callsadad = function (PaymentType) {
        var request = {
            url: urlapi,
            method: 'POST',
            data: {
                SRActivityID: LoginID,
                PaymentType: PaymentType,
                PaymentAmount: "100" //Need to get value from another factory
            },
            headers: ScrollFunction.getheaders()
        };
        return $http(request);
    }
    return sadadpaymentapiobject;
}]); 
下面是另一个工厂,我可以在上面的工厂中获取PaymentAmount参数的值

myapp.factory('leaselisting', ['$http', '$cookieStore', 'cfg', 'ScrollFunction','$q', function ($http, $cookieStore, cfg, ScrollFunction,$q) {
    var leaselistingobject = {};
    var baseurl = cfg.Baseurl;
    var LoginID = $cookieStore.get("LoginID");
    var cookiePreferredLanguage = $cookieStore.get('PreferredLanguage');
    leaselistingobject.getValue = function () {
        var requestObj = {
                                url: baseurl + "api/ServiceRequest/GetROLSPSRLeaseList/",
                                method:'POST',
                                data: {
                                    LoginID: LoginID,
                                    AccountNumber: $cookieStore.get("AccountNumber")
                                },
                                headers: ScrollFunction.getheaders()
                    };
        return $http(requestObj).then(function (response) {
            return response.data;
        });
    }
    return leaselistingobject;
}]);

当我注入like PaymentAmount:leaselisting.getValue()时,如果我尝试在控制台中显示注入的值
console.log(leaselisting.getValue())我得到承诺{$$state等。我有附加的屏幕截图。我需要的是从上图变量AccountNumber。


我正在尝试在第一个api中执行PaymentAmount:“100”而不是硬编码。我想从其他工厂获得它。我可以知道如何执行此操作吗?任何帮助都将不胜感激。谢谢。

将工厂注入第二个工厂,其余操作与您在controller中的操作相同

myapp.factory('leaselisting', ['$http', '$cookieStore', 'cfg', 'ScrollFunction','$q','sadadpaymentapi', function ($http, $cookieStore, cfg, ScrollFunction,$q,sadadpaymentapi) {

leaselisting
工厂有方法
getValue
调用asyc调用并解决它

所以你可以写:

// ...
var request = {
        url: urlapi,
        method: 'POST',
        data: {
            SRActivityID: LoginID,
            PaymentType: PaymentType,
            PaymentAmount: leaselisting.getValue();
        },
 // ...
这是一个模拟您的案例的示例。因为第二个异步调用基于第一个异步调用,所以我将使用Promise链。在我的示例中,我使用
$timeout
模拟异步调用,该调用返回地址的某一部分(在您的示例中,它的
PaymentAmount
),使用Promise解析它并调用其他Promise
$http

app.controller('fessCntrl', function ($scope, sadadpaymentapi) {

    $scope.alertSwap = function () {           
        $scope.data = sadadpaymentapi.getData();    
    }; 
});

app.$inject = ['$scope', 'leaselisting'];

app.factory('leaselisting', ['$timeout','$q',  function($timeout, $q) {    

       var leaselistingobject = {
            getValue: function () {              
               var deferred = $q.defer();               
               $timeout(function(){                  
                return {address: 'Singapore, SG, Singapore, 153 Bukit Batok Street 1'};
               }, 3000).then(function(val){
               deferred.resolve(val); 
               });              
                return deferred.promise;
            }

       };       
        return leaselistingobject;
}]);


app.factory('sadadpaymentapi', ['$http','$q','leaselisting', function($http, $q,leaselisting) {  

       var leaselistingobject = {
            getData: function () {    

               var URL = 'http://maps.googleapis.com/maps/api/geocode/json?address=';  

               return leaselisting.getValue().then(function(result){

                URL = URL + result.address + '&sensor=true';

                 return $http({method: 'GET', url: URL})
                }).then(function (response) {
                   return response.data;
                 });
            }

       };       
        return leaselistingobject;
}]);

您好,您可以在控制器中执行以下操作:

 leaselisting.getValue().then(function(response){
         //you get account number here and pass it in another factory
           var accountNumber = response.data.AccountNumber;
          sadadpaymentapi.callsadad (accountNumber ).then(function(response){
                 //Do with your final response
          });
    });
和工厂代码:

myapp.factory('leaselisting', ['$http', '$cookieStore', 'cfg', 'ScrollFunction','$q', function ($http, $cookieStore, cfg, ScrollFunction,$q) {
        var leaselistingobject = {};
        var baseurl = cfg.Baseurl;
        var LoginID = $cookieStore.get("LoginID");
        var cookiePreferredLanguage = $cookieStore.get('PreferredLanguage');
        leaselistingobject.getValue = function () {
            var requestObj = {
                                    url: baseurl + "api/ServiceRequest/GetROLSPSRLeaseList/",
                                    method:'POST',
                                    data: {
                                        LoginID: LoginID,
                                        AccountNumber: accountNumber
                                    },
                                    headers: ScrollFunction.getheaders()
                        };
            return $http(requestObj)
        }
        return leaselistingobject;
    }]);

确保您已将两个工厂都注入控制器中

谢谢。我已经注入了。PaymentAmount:?我应该在这里写什么!类似leaselisting.getValue的内容?将值分配给变量并使用sadadpaymentapi。PaymentAmount@Sajeetharan
sadadpaymentapi
函数参数不应是字符串从我的问题中你可能理解错了。PaymentAmount:???在?我应该放置leaselisting.getValue吗?PaymentAmount:leaselisting.getValue();谢谢。我编辑了我的问题,并添加了我在注入时得到的屏幕截图。如果您看到我附加的图像,您可以看到一个字段AccountNumber,我想将其分配给PaymentAmount。那么如何才能做到这一点呢?当我执行var data=leaselisting.getValue();console.log(data.data)时也是如此;我没有定义。两个星期以来一直在努力解决这个问题。@Niranjangdbole将立即向您发送Demohank感谢您的努力。谢谢。至少我不明白回信{地址:'新加坡,SG,新加坡,布吉巴托克街153号'};我应该把我的请求对象放在哪里?