我得到了这个调用外部服务的函数,处理结果然后返回一个变量。
我希望将此变量插入到输入中,但是我做错了导致而不是更新函数末尾的表单(正如预期的那样)我必须再次调用该函数并且代码更新字段与FIRST执行的价值...
这是控制器:
$scope.cercaClienteNomeCognome = function() {
if ($scope.nome == undefined){
var name = "";
} else name = angular.uppercase($scope.nome);
if ($scope.cognome == undefined){
var surname = "";
} else surname = angular.uppercase($scope.cognome);
var url = "servizi/getClienteNomeCognome?nomeCliente="+name+"&cognomeCliente="+surname;
esitoRicercaEstesa = TreeService.avviaRicercaEstesa(url);
if (esitoRicercaEstesa == "true") {
vm.cercaSecondario = TreeService.getProClie(); // THIS_LINE
}
};
vm.cercaSecondario 是我尝试更新的字段。
这是服务:
service.avviaRicercaEstesa = function(url) {
service.url = url;
$http.get(url)
.success(function(data, status, headers, config) {
service.apriModaleEstensioneRicerca(data);
})
.error(function(data, status, headers, config) {
toaster.error("[SERVIZIO RECUPERO CLIENTI] Errore durante il ritrovamento dei clienti");
});
}
service.setProClie = function (pro_clie) {
service.pro_clie = pro_clie;
}
service.getProClie = function () {
return service.pro_clie;
}
示例:我第一次运行代码。一切都很顺利。
当我到达THIS_LINE时,该字段不会更新。
然后我运行SECOND时间的代码,当我到达THIS_LINE时,字段会更新第一次执行的值......
我究竟做错了什么?!
我甚至尝试过使用$ timeout和$ evalASync但没有成功......
答案 0 :(得分:0)
也许您的服务导致了这个问题。尝试使用$ q并从您的服务返回承诺。然后像这样使用它
$scope.cercaClienteNomeCognome = function() {
if ($scope.nome == undefined){
var name = "";
} else name = angular.uppercase($scope.nome);
if ($scope.cognome == undefined){
var surname = "";
} else surname = angular.uppercase($scope.cognome);
var url = "servizi/getClienteNomeCognome?nomeCliente="+name+"&cognomeCliente="+surname;
esitoRicercaEstesa = TreeService.avviaRicercaEstesa(url);
if (esitoRicercaEstesa == "true") {
TreeService.getProClie().then(function (cercaSecondario) {
vm.cercaSecondario = cercaSecondario;
});
}
};
答案 1 :(得分:0)
试试这样:
TreeService.getProClie()
.then(function(res){
vm.cercaSecondario = res;
})
编辑: 为此,您必须将服务设置为返回承诺。
.service('TreeService', function($q){
var data = this;
data.getProClie = function(){
var defer = $q.defer();
$http.get('example/url')
.success(function(res){
defer.resolve(res)
})
.error(function(error,status){
defer.reject(error);
})
return defer.promise;
};
})
答案 2 :(得分:0)
我的赌注是你的远程调用将使你的代码“超出角度环境”,所以当你从远程调用得到你的响应时,角度将不会知道这个并且不会消化。因此,您需要在ElseIf Me.cmbPARTNOSEARCH.ListIndex <> -1 Then
If Me.cmbPARTNOSEARCH.ListIndex <> -1 Then
之后手动调用$scope.$digest()
,或者将远程调用包装到vm.cercaSecondario = TreeService.getProClie();
。这种方式角度将由它自己消化。
答案 3 :(得分:0)
以这种方式编写getProClie
函数。
你需要承诺链接
service.getProClie = function () {
var defer = $q.defer();
defer.resolve(service.pro_clie);
return defer.promise;
}
然后在控制器中:
TreeService.getProClie().then(function(data){
vm.cercaSecondario = data
},
function(){
//error handling
});