2016-03-22 2 views
0

Я приложение migratin от Angular 1.2 до 1.3. И я столкнулся с проблемой с различным поведением функций removeControll и addControll.Угловая от 1,2 до 1,3 (или новее) формы removeControll и addControll issues

У меня есть такая директива, которая ускользает от зарегистрированных элементов в форме (не спрашивайте, почему, нам это просто нужно).

<div name="es.caped" ng-model="es.caped" esc-dir></div>  

link: function link($scope, $element, $attrs, $ctrl) { 
     var nameAttr = $attrs.name.replace(/([ #;?&,.+*~\':"!^$[\]()=>|\/@\{\}])/g, '\\$1'); 
     $ctrl[1].$removeControl($ctrl[0]); 
     $ctrl[0].$name = nameAttr; 
     $ctrl[1].$addControl($ctrl[0]); 
    } 

И Угловое 1,2 даст желаемого результата {"es\\.caped":{}}. Но 1,3 даст мне старое значение {"es.caped":{}}

Для получения дополнительной информации, как это работает смотрите:
версии 1.2 - Plunker 1.2 version
версии 1.3 - Plunker 1.3 version
Plunker распечатывает форму результата как JSON (1.3 выход больше, но вы можете найти значения).

Я пытался найти в документации и для версий 1.2 и 1.3 нет почти ничего, но на 1.5 я нашел:

Note that the current state of the control will not be reflected on the new parent form. This is not an issue with normal use, as freshly compiled and linked controls are in a $pristine state. However, if the method is used programmatically, for example by adding dynamically created controls, or controls that have been previously removed without destroying their corresponding DOM element, it's the developers responsibility to make sure the current state propagates to the parent form

И я уже потратил много часов, чтобы решить эту проблему, но не успех. Я не знаю, как распространять изменения. Я буду рад за любую помощь.

Примечание: Я пробовал его также с угловыми 1.4 и 1.5. И он имеет такое же поведение, как 1.3. Мое конечное состояние миграции - 1,5, но я следую за версией руководства по миграции.

ответ

0

Проблема может быть решена с этим. Он изменит имя элемента и отразит его в контроллере.

link: function link($scope, $element, $attrs, $ctrl) { 
     var nameAttr = $attrs.name.replace(/([ #;?&,.+*~\':"!^$[\]()=>|\/@\{\}])/g, '\\$1'); 
     $attrs.name = nameAttr ; 
}