2015-09-01 2 views
0

Здравствуйте, мне нужна помощь. Я попытался создать директиву, которая следит за моделью поля ввода, если эта модель изменится, она должна проверять специальные символы, если они есть, модель получает синтаксический анализ, и она должна возвращать разобранную стоимость.Watch in Directive change Модель

Теперь все это прекрасно работает, значение поля ввода изменилось и является правильным, но кажется, что только значение изменилось, пока модель еще не была проанализирована.

Мои Html

<input type="text" name="bestellnummer" ng-model="we.bestellnummer" required parse/> 

И Моя Директива

.directive('parse', function ($timeout, Ls, $window) { 

return { 
    restrict: 'AE', 
    require: 'ngModel', 
    link: function (scope, element, attrs, ngModel) { 
     scope.$watch(attrs.ngModel, function (Val) { 
      //console.log(Val) 
      if (Val != undefined) { 
       if ((Val.toString()).indexOf('?') != -1 && (Val.toString()).indexOf('!') != -1) { 
        Val = Val.slice(0, -1); 
        scope.code = new Gs1Parser.Parse(Val); 
        //console.log(scope.code); 
        if (scope.code != undefined && scope.code[0].Key != 'invalid') { 

         var ParsedVal = scope.code[0].Key; 
         scope.code = undefined;      
         $window.Gs1Parser.returnedValue = []; 
         //try with ngModel 
         ngModel.$modelValue = ParsedVal; 
         //element[0].value = ParsedVal; 
         //scope.ab.abNr = ParsedVal; 
        } else if (scope.code[0].Key == 'invalid') { 
         Val = Val.slice(1); 
         //element[0].value = Val; 
         //scope.ab.abNr = Val; 
        } 
       } 
      } 
     })     
    } 
} 

})

Поэтому в основном пользователь вводит? 12345! Парсер меняет это на 345, и это должна быть новая модель. На данный момент значение равно 345, но как только я отправляю данные, отправляется modelvale (? 12345!).

Заранее спасибо

+0

Почему вы не можете использовать ng-change? –

+0

id предпочитает, чтобы он был в отдельной директиве, потому что у меня есть несколько независимых модулей и с ng-change мне пришлось бы взять эту логику в контроллер, но если у меня нет другого выбора, я думаю, что ng-change может быть возможностью – stackg91

+0

Вы должны не изменяйте значение DOM, вместо этого измените модель. Требовать ngModel в директиве и изменить ее значение. –

ответ

1

просто изменить значение охвата, как:

$parse(attrs.ngModel).assign(scope, Val); 

(простой scope[attrs.ngModel]=Val не будут работать на то «model.value» только для простого «значение») Вы должны быть осторожны, Сбрось так как изменение этого значения снова вызовет ваши часы.