Угловой 1.5. Как сделать включенный шаблон для привязки к области действия компонента

Я использую компонент формы с общими функциями проверки и сохранения. Входные данные передаются в форму как включенный шаблон, например так:

<form-editor entity="vm.entity">
        <input ng-model="vm.dirtyEntity.name" required name="nameInput">
</form-editor>

Проблема в том, что ng-модель создает поле dirtyEntity в родительском vm, а не модифицирует одно из компонентов. Определение компонентов контроллера как "formVm" не помогло.

Есть ли способ заставить зашитый элемент ng-model изменить только область видимости компонента?

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

1 ответ

Основываясь на plunkr dfsq, вот решение вашей проблемы:

В вашем компоненте вы программно копируете элементы, предназначенные для включения, и добавляете их в свой контроллер форм.

Вы можете программным образом включить использование $ transclude и добавить элементы в форму следующим образом:

$transclude($scope, function(clone) {
  $element.find('form').append(clone);
})

Затем вы добавляете элементы в свой контроллер формы следующим образом:

$scope.testForm.$addControl($element);

В этом случае вам нужно обернуть его в тайм-аут, в противном случае angular создаст экземпляр вашего контроллера и ваш код будет запущен, однако контроллер формы еще не создан.

Вот полный фрагмент, и вы можете найти plunkr здесь

controller($scope, $element, $transclude, $timeout) {
  // use a timeout to break javascript flow to allow a DOM update
  $timeout(function() {
    $transclude($scope, function(clone) {
      $element.find('form').append(clone);

      // take the form and add the elements to it
      $scope.testForm.$addControl($element);
    })
  })
}

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

Другие вопросы по тегам