1

Я пытаюсь использовать ngForm, связанный с каждой итерацией ngRepeat в моей директиве. Я попытался использовать require: 'form', но он возвращается как неопределенный, также попытался '^ form', но он дает mainForm вне ngRepeat. Есть ли особый способ, например require: 'ngForm', который даст мне контроллер ngForm для первого элемента моей директивы вида? Шаблон директивыAngularJS Как требовать ngForm на том же уровне, что и директива

Родителя вне директивы формы ракурса

... // some other markup 
<form name="mainForm"> 
... // some other markup 

// Vertically stacked tabs directive 
// Creates left/right cols, left=stacked tabs, right=form associated content using transclude 
<pills> 

    // Pill pane content with title attribute passed up to pills during compile for stacked tabs 
    <pill ng-repeat="form in formData.documents" 
      title="{{form.name}}"> 

      // Generated form content for each pill pane 
      <form-view form="form" 
         model="formModel"></form-view> 

    </pill> 

</pills> 

... // some other markup 
</form> 

Формы ракурса шаблона директивы

<fieldset ng-form="form.id"> // want reference to this controller using require 

    <h3 ng-bind="form.name"></h3> 
    <div ng-repeat="field in form.mapping.fields" 

    ... // bunch of generated fields 
    </div> 

</fieldset> 

Формы вида директивы

.directive('formView', [function() { 

    return { 
     restrict: 'E', 
     templateUrl: '/app/components/form-view/formview.html', 
     scope: { 
      form: '=', 
      model: '=' 
     }, 
     require: ['^tabs', '^pills', '^form'], // also tried 'form', '?form', 'ngForm', 'ngform' 
     link: function($scope, $element, $attrs, ctrls) { 
      $scope.tabsCtrl = ctrls[0]; // got tabs 
      $scope.pillsCtrl = ctrls[1]; // got pills 
      $scope.formCtrl = ctrls[2]; // always undefined or grabs mainForm 
     } 
    }; 
}]); 

ответ

2

Вы не можете «требовать» вещи, находящиеся внутри элемента вашей директивы, только на ней или над ней.

Один из способов сделать это - создать собственную директиву ngForm, которая потребует вашего formView, а затем поговорит с ним. Он будет жить вдоль существующего ngForm.

Ознакомьтесь с реализацией для ngForm и ngModel для примера реального мира. NgForm знает о ngModels внутри него, но это не потому, что форма находит модели, модели позволяют форме знать о своем существовании.

+0

Спасибо, я рассмотрю реализацию моей собственной директивы ngForm, это отличная идея. Также поможет несколько других функций, которые будут интегрированы в приложение. – mtpultz

Смежные вопросы