Угловые формы от 1.2 до 1.3 (или новее): проблемы с removeControll и addControll

0

Я приложение migratin от Angular 1.2 до 1.3. И я столкнулся с проблемой с различным поведением функций removeControll и addControll.

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

<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]);
    }

И Angular 1.2 даст желаемый результат {"es\\.caped":{}}. Но 1.3 даст мне старое значение {"es.caped":{}}

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

Я пытался искать в документах, а для версий 1.2 и 1.3 почти ничего нет, но за 1,5 я нашел:

Обратите внимание, что текущее состояние элемента управления не будет отражено в новой родительской форме. Это не проблема при нормальном использовании, поскольку только что скомпилированные и связанные элементы управления находятся в $ первозданном состоянии. Однако, если этот метод используется программно, например, путем добавления динамически созданных элементов управления или элементов управления, которые были удалены ранее, без уничтожения их соответствующего элемента DOM, ответственность разработчиков заключается в том, чтобы убедиться, что текущее состояние распространяется на родительскую форму

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

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

Теги:
migration

1 ответ

0
Лучший ответ

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню