1

У меня проблема с 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). Если он работает без проблем, напишите об этом тоже.

+1

Я нахожусь windows 8.1/Chrome Version 45.0.2454.101 m - обе скрипки работают одинаково для меня. – sirrocco

+1

То же самое в Firefox Developer Edition 43.0a2 – sirrocco

+0

#sirrocco спасибо за помощь, пожалуйста, проверьте его снова, потому что я исправляю внешнюю ссылку в скрипке для углового 1.4.7 –

ответ

1

Я сообщаю эту проблему угловой команде. Полный ответ https://github.com/angular/angular.js/issues/13068.

Короче говоря, в подобной ситуации лучше использовать это:

ngModelController.$setViewValue("A"); 

тогда это:

ngModelController.$viewValue ="A"; 

Рабочая jsfiddle для углового 1.4.7: http://jsfiddle.net/455qdd6p/1/

мне нужен его решить для моего углового модуля https://github.com/uhlryk/angular-dynamic-number