2017-08-17 46 views
0

您好我正在angularjs中開發web應用程序。我有以下要求。我有一家工廠。我在下面添加了代碼片段。如何在Angularjs中調用巢工廠?

myapp.factory('sadadpaymentapi', ['$http', '$cookieStore', 'cfg', 'ScrollFunction', 'leaselisting', function ($http, $cookieStore, cfg, ScrollFunction, leaselisting) { 
    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) { 
     leaselisting.leaselisting().then(function (response) { 
     //Problem in calling 
     }, function (error) { }); 
     var request = { 
      url: urlapi, 
      method: 'POST', 
      data: { 
       SRActivityID: LoginID, 
       PaymentType: PaymentType, 
       PaymentAmount: "100" 
      }, 
      headers: ScrollFunction.getheaders() 
     }; 
     return $http(request); 
    } 
    return sadadpaymentapiobject; 
}]); 

這裏是我的第二個工廠leaselisting

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

我發現錯誤在下面一行

leaselisting.leaselisting().then(function (response) { //Problem in calling 
     }, function (error) { }); 

可能我就是我做錯了什麼在上面的代碼?我可以知道是否有可能從另一個工廠調用一個工廠?我從收錄名單中得到的回覆,我想通過sadadpaymentapi的callsadad函數傳遞給它。那麼有人可以在上面的代碼中激勵我嗎?我得到錯誤無法讀取屬性'然後'未定義的在leaselisting.leaselisting().then(function (response) {},function(error){});

也有什麼辦法可以直接注入工廠像支付金額:注入工廠這樣的事情?

回答

0

我假設,那leaselistingobject.getValue是一個異步函數。 所以首先讓你的價值:

leaselistingobject.getValue = function(){ 
    var requestObj = { 
     url: "api/ServiceRequest/getValue/" 
    }; 
    return $http(requestObj).then(function (response) { 
     return response.data; 
    }); 
} 

,然後使用它。要讓所有的異步操作完成,我們使用angulars $qHere你可以找到一個小教程。

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 leastListingPromise = leaselisting.leaselisting(); 
    var getValuePromise = leaselisting.getValue(); 
$q.all([leastListingPromise, getValuePromise]).then(function (responses) { 
    //Here you have both responses in an array 
    var request = { 
     url: urlapi, 
     method: 'POST', 
     data: { 
      SRActivityID: LoginID, 
      PaymentType: PaymentType, 
      PaymentAmount: responses[1] 
     }, 
     headers: ScrollFunction.getheaders() 
    }; 
    return $http(request); 


    }); 
} 
return sadadpaymentapiobject; 
}]); 

爲了使leaselisting()回報請求的響應從

$http(requestObj).then(function (response) { 
}, function (error) { 
}); 

改變功能的結束

return $http(requestObj).then(function (response) { 
    return response.data; 
}, function (error) { 
}); 

如果不會做你可以忽略錯誤可能出現的錯誤什麼功能部分:

return $http(requestObj).then(function (response) { 
    return response.data; 
}); 
+0

好的,謝謝。是否有可能做一些支付金額:注入工廠並分配值。謝謝 –

+0

對不起,但我不確定你的意思。 – Astasian

+0

在sadadpaymentapi工廠我有calladad方法。在這種方法中,我有三個輸入參數,如sractivituid,付款類型和付款金額。現在我想從租賃工廠中爲付款金額分配值,那麼我可以做些付款金額:從租賃上市API中獲取價值。 –