2015-10-07 7 views
-1

Я новичок в angularjs, Я использую пользовательские директивы, которые я получил здесь Fiddle Эта директива не разместить значение цены на контроллер после проверки, я получаю только имя значение поля.angularjs пользовательские значения директивы не проводки к контроллеру

Вот мой код:

<div class="form-group"> 
<label for="exampleInputEmail1">Item Price</label>     
<div class="input-group"> 
<span class="input-group-addon">$</span> 
<input id="phone" class="form-control" ng-model="item.price" currency-input> 
</div> 
</div> 

Вот код контроллера:

angular.module('ngApp') 
.controller('ItemCtrl',function($scope){ 

$scope.item = {}; 

$scope.addItem = function(){  
    console.log($scope.item); 
} 
}) 
.directive('currencyInput', function(){ 
return ...... 
}; 

});

+0

попытаться сузить это, используя (и размещая здесь) минимальный пример. – Marged

ответ

2

Я вижу, что вы используете функцию link, чтобы зарегистрировать свой собственный парсер.

Обратите внимание, что этот подход является скорее обходным для регистрации нашего пользовательского parsers в NgModelController, поскольку для этого не существует прямого API для этого извне директив.

Предлагаю следующие изменения, чтобы заставить его работать.

  1. angular.module('minovateApp',[]) - Вам необходимо передать пустой массив, указав, что для этого модуля нет зависимостей.
  2. Причина, по которой вы не можете зафиксировать значение в модели, состоит в том, что вы используете not returning the parsed value из своего пользовательского анализатора. Поэтому измените функцию link, как показано ниже.

Внутри вашей валюте ввода директивы

link: function(scope, element, attrs, ctrl) { 
     /* removed the return as it's not required */ 
     ctrl.$parsers.push(function(inputValue) { 
      var inputVal = element.val(); 

      /* removing your logic for brevity */ 
      var res = intPart + decPart; 

      if (res != inputValue) { 
       ctrl.$setViewValue(res); 
       ctrl.$commitViewValue(); 
       ctrl.$render(); 
      } 

      /* return the final value once you're done parsing */ 
      return res; 
    }); 

Вот пример Pen с указанными выше изменениями. Надеюсь, это поможет :)

+0

отлично, он работает, я просто положил 'return res:' Спасибо @Arkantos –

+1

Рад, что я мог помочь :) – Arkantos

Смежные вопросы