2017-08-17 48 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中获取价值。 –