Доступ к динамически именованной форме с углового контроллера

Все,

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

Вот некоторый код:

my_template.html:

<html>
  <div ng-app="MyApp">
    <div ng-controller="MyController as my_controller">
      <form name={{ form.form_name }}
        {% for field in form %}
          {{ field }}
        {% endfor %}
      </form>
      <button ng-click="do_something">do something</button>
    </div>
  </div>
</html>

my_view.py:

def my_view(request):
  form = MyForm(form_name=generate_a_random_string())
  return render_to_template({"form":form}
  return render_to_response('my_template.html', {"form": form})

my_app.js:

(function() {
    var app = angular.module("MyApp");
    app.controller("MyController", ['$scope', function($scope) {
      $scope.do_something = function() {
        /* OBVIOUSLY THIS DOESN'T WORK */
        /* BUT WHAT DO I REPLACE "my_form" WITH ? */
        my_form['some_field_name'].$setValidity('some_validity_type', false);
        my_form['some_field_name'].$setDirty();
      }
    }]);
});

Если это помогает, я использую django-angular, чтобы мои Django-формы хорошо играли с Angular.

Благодарю.

1 ответ

Название формы как в

<form name="myForm">

будет отображаться в вашем контроллере как NgFormController с тем же именем

myController.myForm

Я думаю, что часть проблемы в том, что у вас есть {{ form.form_name }} в вашем шаблоне, который из того, что я могу сказать, не был инициализирован в вашем контроллере. Вам, вероятно, нужно сначала инициализировать имена форм внутри контроллера, а затем с помощью ng-repeat создать элементы DOM формы и извлечь имя оттуда. Затем вы можете получить доступ к NgFormController с помощью this.form_name внутри вашего контроллера просмотра.

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