У меня проблема с ngModel.NgModelController. $ Parsers. Я объясню это на примере: Я создаю директиву для поля ввода. Каждый раз, когда я меняю значение на этом входе в html, он должен вызывать мою зарегистрированную функцию.
И эта зарегистрированная функция всегда должна изменять то, что вы пишете в поле ввода, на символ «A», но модифицируете модель.
HTML файл:
<div ng-app="myApp">
<form>
<input ng-model="myval1" somedir/>
</form>
</div>
и JS файл:
var myApp = angular.module('myApp', []);
myApp.directive("somedir", function(){
return {
restrict:'A',
require: '?ngModel',
link: function(scope, element, attrs, ngModelController) {
ngModelController.$parsers.unshift(function(val){
console.log("i'm here");
ngModelController.$viewValue ="A";
ngModelController.$render();
return val;
});
}
}
});
готовлюсь jsfiddle к тестам:
угловой 1.2.9: http://jsfiddle.net/hwzxfon3/1/
угловой 1.4.7: http://jsfiddle.net/372re41m/1/
И в угловом 1.2.9 он работает правильно. В угловом 1.4.7 есть некоторая проблема. Как его получить: сфокусируйтесь на поле ввода и нажмите 3 раза ту же кнопку, например. '1'. Первый раз он показывает «A» в поле ввода и в консоли браузера i'm here
. Второй раз тоже то же самое. Но в третий раз он показывает «A» + push char (например, «A1») и не записывает в консоль браузера i'm here
, что означает, что зарегистрированная функция не вызывалась.
Скажите, пожалуйста, если у меня есть ошибка в моем коде (напишите, что изменить), или это ошибка в угловом (тогда я сообщаю об ошибке угловой команде)? Я тестирую его на последнем хроме и сафари в os x (10.10.5). Если он работает без проблем, напишите об этом тоже.
Я нахожусь windows 8.1/Chrome Version 45.0.2454.101 m - обе скрипки работают одинаково для меня. – sirrocco
То же самое в Firefox Developer Edition 43.0a2 – sirrocco
#sirrocco спасибо за помощь, пожалуйста, проверьте его снова, потому что я исправляю внешнюю ссылку в скрипке для углового 1.4.7 –