Показать сообщение отдельно
  #3 (permalink)  
Старый 11.02.2014, 09:29
Аватар для FireVolkhov
Аспирант
Отправить личное сообщение для FireVolkhov Посмотреть профиль Найти все сообщения от FireVolkhov
 
Регистрация: 17.04.2013
Сообщений: 88

Дело в том, что dom содержимое директивы компилится раньше модели в рут элементе, в результате переписывается ссылка на контроллер модели в контроллере формы.

Результат сборки директивы
<div name="name" ng-model="model">
  <input name="name" ng-model="model">
</div>


Код в angular'e v1.2.11, отвечающий за добавление контроллера.
/**
   * @ngdoc function
   * @name ng.directive:form.FormController#$addControl
   * @methodOf ng.directive:form.FormController
   *
   * @description
   * Register a control with the form.
   *
   * Input elements using ngModelController do this automatically when they are linked.
   */
  form.$addControl = function(control) {
    // Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored
    // and not added to the scope.  Now we throw an error.
    assertNotHasOwnProperty(control.$name, 'input');
    controls.push(control);

    if (control.$name) {
      form[control.$name] = control;
    }
  };


Сначала добавиться контроллер из инпута, потом его перепишет контроллер из дива.

Решение
1. Удалить при компиляции атрибут name http://plnkr.co/edit/NpOoWQFTtOo0ICpXm9kL?p=preview
2. Использовать вместо ng-model, какой либо другой атрибут http://plnkr.co/edit/Yj42bdG0DwWdiShboF3T?p=preview
Ответить с цитированием