Javascript Angularjs在一个或多个工厂内使用工厂值
嗨,我正在用angularjs开发web应用程序。我有一个java脚本文件和两个工厂,它们对web api进行http调用。我想在另一个工厂中使用一个工厂值输出。下面是我的第一家工厂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
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@Sajeetharansadadpaymentapi
函数参数不应是字符串从我的问题中你可能理解错了。PaymentAmount:???在?我应该放置leaselisting.getValue吗?PaymentAmount:leaselisting.getValue();谢谢。我编辑了我的问题,并添加了我在注入时得到的屏幕截图。如果您看到我附加的图像,您可以看到一个字段AccountNumber,我想将其分配给PaymentAmount。那么如何才能做到这一点呢?当我执行var data=leaselisting.getValue();console.log(data.data)时也是如此;我没有定义。两个星期以来一直在努力解决这个问题。@Niranjangdbole将立即向您发送Demohank感谢您的努力。谢谢。至少我不明白回信{地址:'新加坡,SG,新加坡,布吉巴托克街153号'};我应该把我的请求对象放在哪里?