This commit is contained in:
Juan Ferrer Toribio 2017-01-19 10:51:46 +01:00
parent 9fcf18594a
commit 33711c5e33
1 changed files with 38 additions and 16 deletions

View File

@ -12,7 +12,8 @@ export function directive(resolve, normalizer) {
scope: {
url: '@',
showField: '@',
valueField: '@'
valueField: '@',
model: '<'
},
template: function(element, attrs) {
normalizer.normalize(attrs);
@ -39,34 +40,55 @@ export function controller($http, $element, $attrs, $scope, $parse, $document, p
let locked = false;
$http.get($scope.url).then(
json => {data = json.data;},
json => {
data = json.data;
setTimeout(function() {
$scope.setValue($scope.model);
});
},
json => {data = [];}
);
$scope.$watch($attrs.model, (value) => {
$scope.$watch($attrs.model, (newValue) => {
if(!locked) {
locked = true;
//$scope.selectOptionByValue(value);
$scope.setValue(newValue);
locked = false;
}
});
$scope.selectOptionByIndex = function(index) {
let item = data[index];
input.val(item[$scope.showField]);
$scope.$apply(function () {
locked = true;
$parse($attrs.model).assign($scope, item[$scope.valueField]);
locked = false;
});
}
$scope.setValue = function(value) {
let index = -1;
$scope.selectOptionByValue = function(value) {
if(data)
if(value && data)
for(let i = 0; i < data.length; i++)
if(data[i][$scope.valueField] == value) {
$scope.selectOptionByIndex(i);
break;
return;
}
$scope.selectOptionByIndex(-1);
}
$scope.selectOptionByIndex = function(index) {
let value;
if(index >= 0) {
let item = data[index];
input.val(item[$scope.showField]);
value = item[$scope.valueField];
}
else {
input.val('');
value = undefined;
}
if(!locked) {
$scope.$apply(function () {
locked = true;
$parse($attrs.model).assign($scope, value);
locked = false;
});
}
}