В настоящее время я использую следующее.
$scope.$$childHead.customerForm[firstName]
, так что:
<form name="customerForm">
<input type="text" name="firstName"
ng-model="data.customer.firstName"
tabindex="1"
ng-disabled="!data.editable"
validationcustomer />
</form>
Но это работает только в Chrome. Теперь я попробовал следующее:
$scope.editCustomerForm[firstName]
, так что:
<form name="customerForm" ng-model="editCustomerForm">
<input type="text" name="firstName"
ng-model="data.customer.firstName" tabindex="1"
ng-disabled="!data.editable"
validationcustomer />
</form>
Который не работает. Обратите внимание, что моя форма находится на вкладке Foundation. Как я могу получить доступ firstName
?
РЕДАКТИРОВАТЬ : Похоже, что form
не добавляется к, scope
когда он находится во вкладке Foundation.
У кого-нибудь есть решение для этого?
Вы можете прикрепить форму к некоторому объекту, который определен в родительском контроллере. Тогда вы сможете добраться до своей формы даже из дочерней области.
Родительский контроллер
Какой-то шаблон в дочерней области
Проблема в том, что форму не нужно определять в тот момент, когда выполняется код в контроллере. Таким образом, вы должны сделать что-то вроде этого
источник
var watcher = $scope.$watcher
и внутри оператора if вы бы извините watcher (), чтобы открепить часы. Это делает егоЕсли вы хотите передать форму контроллеру для целей проверки, вы можете просто передать ее в качестве аргумента методу, обрабатывающему отправку. Используйте имя формы, поэтому для исходного вопроса это будет что-то вроде:
источник
<form name="myform"></form>
, или даже<div ng-form name="myform"></div>
, то ваше событие щелчка будет выглядеть следующим образом :ng-click="submit(myform)"
. Затем вы можете получить доступ к объекту формы Angular в функции щелчка, например:$scope.submit = function (form) { if (form.$valid) {
и т. Д.Немного опоздал на ответ, но пришел со следующим вариантом. Это работает для меня, но не уверен, что это правильный путь или нет.
На мой взгляд, я делаю это:
И в контроллере:
Теперь после этого я получил мою форму в моей переменной контроллера, которая
$scope.myForm
источник
name
атрибуту быть именно таким, каким я хочу его видеть. Проблема с другими решениями фиктивных объектов заключается в том, что если этот компонент используется в другом компоненте с ng-формой, то другая ng-форма использует это имя форм буквально. Так что у него будет поле со строковым литералом (НЕ вложенные свойства) с именем "dummy.myForm", я счел это недопустимым.Чтобы иметь возможность доступа к форме в вашем контроллере, вы должны добавить ее в фиктивный объект области видимости.
Что-то вроде
$scope.dummy = {}
Для вашей ситуации это будет означать что-то вроде:
В вашем контроллере вы сможете получить доступ к форме:
и вы сможете делать такие вещи, как
WIKI LINK
источник
dummy.customerForm
он будет неопределенным до тех пор, пока не будут выполнены условияng-if
, если на элемент формы будетng-if
Этот ответ немного запоздал, но я наткнулся на решение, которое делает все намного проще.
На самом деле вы можете назначить имя формы непосредственно вашему контроллеру, если вы используете синтаксис controllerAs, а затем ссылаться на него из вашей переменной «this». Вот как я это сделал в своем коде:
Я настроил контроллер через ui-router (но вы можете сделать это так, как хотите, даже в HTML-коде, например
<div ng-controller="someController as myCtrl">
). Вот как это может выглядеть в конфигурации ui-router:а затем в HTML вы просто задаете имя формы как «controllerAs». «name», например:
теперь внутри вашего контроллера вы можете очень просто сделать это:
источник
Да, вы можете получить доступ к форме в контроллере (как указано в документации ).
За исключением случаев, когда ваша форма не определена в области контроллера и определена в дочерней области.
В основном, некоторые угловые директивы, такие как
ng-if
,ng-repeat
илиng-include
, создают изолированную дочернюю область. Как и любые пользовательские директивы с определеннымscope: {}
свойством. Возможно, ваши фундаментальные компоненты тоже на вашем пути.У меня была такая же проблема при введении простой
ng-if
вокруг<form>
тега.Смотрите их для получения дополнительной информации:
https://groups.google.com/forum/#!topic/angular/B2uB8-9_Xbk
AngularJS - потеря возможности при использовании ng-include
Примечание: предлагаю переписать свой вопрос. Ответ на ваш вопрос - да, но ваша проблема немного отличается:
На что ответ будет просто: нет .
источник
$scope.forms = {}
andname="forms.form1"
)добавить
ng-model="$ctrl.formName"
атрибут к вашей форме, а затем в контроллере вы можете получить доступ к форме как объект внутри вашего контроллера с помощьюthis.formName
источник
Определенно вы не можете получить доступ к форме в области видимости. это не создано. DOM из HTML-шаблона загружается немного медленно, как конструктор контроллера. решение состоит в том, чтобы наблюдать, пока не загрузится DOM и не будет определена вся область действия!
в контроллере:
источник