Я пытаюсь использовать автозаполнение jquery ui, чтобы вставить значение в форму angularjs.Проблема в том, что когда я отправляю данные с $ http, значение, полученное при автозаполнении, не обновляет ng-модель!Я прочитал некоторый пост об использовании $ scope.apply (), но я не понимаю, как его использовать и где!Это код jquery для автозаполнения:
$(document).ready(function(){
$("#tags").autocomplete({
source: '/contabilita/include/autocomplete.asp',
minChars: 3,
autoFill: true,
mustMatch:false,
cacheLength: 1,
select: function(event, ui) {
event.preventDefault();
$("#tags").val(ui.item.label);
$("#selected-tags").val(ui.item.label);
$("#PIVA").val(ui.item.piva);
$("#CFISCA").val(ui.item.cf);
$("#CAP").val(ui.item.cap);
$("#CITY").val(ui.item.city);
$("#INDIRIZZO").val(ui.item.indi).trigger('change');
$("#INDIRIZZO").trigger('input');
$("#PR").val(ui.item.pr).closest('.select-wrapper')
.find('li').removeClass("active").closest('.select-wrapper')
.find('.select-dropdown').val(ui.item.pr)
.find('span:contains(' + ui.item.pr + ')')
.parent().addClass('selected active');
$("#PR").select();
},
});
И это HTML:
<div class="row">
<div class="col s1">
<label>N°:
<input type="text" ng-model="reg.NUMERO">
</label>
</div>
<div class="col s5">
<label>Intestazione:
<input ng-model="reg.INTESTAZIONE" id="tags" type="text">
</label>
</div>
<div class="row">
<div class="col s4">
<label>Indirizzo:
<input ng-model="reg.INDIRIZZO" id="INDIRIZZO" type="text" ng-model-options="{updateOn: 'change input'}">
</label>
</div>
<div class="col s3">
<label>Città:
<input ng-model="reg.CITY" id="CITY" type="text">
</label>
</div>
<div class="col s3">
<label>CAP:
<input ng-model="reg.CAP" id="CAP" type="text">
</label>
</div>
Это угловой контроллер:
.controller('gestFat', function($scope,$http,$location,$rootScope) {
$scope.reg = {};
$scope.reg.GIORNO = $rootScope.today;
$scope.reg.RF = "RF01";
$scope.reg.T_IVA = "10";
console.log("cerco la fattura");
var com = $location.search().COM_ID;
$scope.stampaFat = function(){
$http.post('/contabilita/include/insert_fattura.php', $scope.reg)
.success(function(data){
M.toast({html:'Intervento inserito...'+data, inDuration:1500});
})
.error(function(status){alert("Errore di connessione!" + status)});
};
})
РЕШЕНИЕ:
это окончательное решение
.directive('ngautocomplete', function () {
return function link(scope, element, attributes) {
element.autocomplete({
source: '/contabilita/include/autocomplete.asp',
minChars: 3,
autoFill: true,
mustMatch:false,
cacheLength: 1,
select: function(event, ui) {
event.preventDefault();
$("#tags").val(ui.item.label);
$("#PIVA").val(ui.item.piva).trigger('input');;
$("#CFISCA").val(ui.item.cf).trigger('input');;
$("#CAP").val(ui.item.cap).trigger('input');;
$("#CD").val(ui.item.cd).trigger('input');;
$("#PEC").val(ui.item.pec).trigger('input');;
$("#CITY").val(ui.item.city).trigger('input');;
$("#INDIRIZZO").val(ui.item.indi).trigger('input');
$("#NAZIONE").val(ui.item.nazione).closest('.select-wrapper').find('li').removeClass("active").closest('.select-wrapper').find('.select-dropdown').val(ui.item.nazione).find('span:contains(' + ui.item.nazione + ')').parent().addClass('selected active');
$("#NAZIONE").select().trigger('change');;
$("#PR").val(ui.item.pr).closest('.select-wrapper').find('li').removeClass("active").closest('.select-wrapper').find('.select-dropdown').val(ui.item.pr).find('span:contains(' + ui.item.pr + ')').parent().addClass('selected active');
$("#PR").select().trigger('change');;
}
});
};
})