현재 다음을 사용하고 있습니다.
$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
있습니까?
편집 : Foundation 탭 안에있을 때 form
추가되지 않은 것처럼 보입니다 scope
.
누구든지 이것에 대한 해결책을 가지고 있습니까?
답변
다른 의견에서 언급되었지만 “Controller As”구문을 사용하는 사람들에게는 약간의 철자가 필요하다고 생각했습니다.
<div ng-controller="MyController as ctrl">
<form name="ctrl.myForm">
...inputs
Dirty? {{ctrl.myForm.$dirty}}
<button ng-click="ctrl.saveChanges()">Save</button>
</form>
</div>
그런 다음 코드에서 FormController에 액세스 할 수 있습니다.
function MyController () {
var vm = this;
vm.saveChanges = saveChanges;
function saveChanges() {
if(vm.myForm.$valid) {
// Save to db or whatever.
vm.myForm.$setPristine();
}
}
답변
부모 컨트롤러에 정의 된 일부 개체에 양식을 첨부 할 수 있습니다. 그러면 하위 범위에서도 양식에 도달 할 수 있습니다.
부모 컨트롤러
$scope.forms = {};
하위 범위의 일부 템플릿
<form name="forms.form1">
</form>
문제는 컨트롤러에서 코드를 실행할 때 양식을 정의 할 필요가 없다는 것입니다. 그래서 당신은 이런 식으로해야합니다
$scope.$watch('forms.form1', function(form) {
if(form) {
// your code...
}
});
답변
유효성 검사 목적으로 양식을 컨트롤러에 전달하려면 제출을 처리하는 메소드에 인수로 전달하면됩니다. 양식 이름을 사용하면 원래 질문의 경우 다음과 같습니다.
<button ng-click="submit(customerForm)">Save</button>
답변
답이 늦었지만 다음 옵션이 제공되었습니다. 그것은 나를 위해 일하고 있지만 그것이 올바른 방법인지 아닌지 확실하지 않습니다.
내 생각에 나는 이것을하고있다 :
<form name="formName">
<div ng-init="setForm(formName);"></div>
</form>
그리고 컨트롤러에서 :
$scope.setForm = function (form) {
$scope.myForm = form;
}
이제이 작업을 수행 한 후 컨트롤러 변수에서 양식을 얻었습니다. $scope.myForm
답변
컨트롤러에서 폼에 액세스하려면 더미 스코프 객체에 폼을 추가해야합니다.
같은 것 $scope.dummy = {}
상황에 따라 다음과 같은 의미가됩니다.
<form name="dummy.customerForm">
컨트롤러에서 다음을 통해 양식에 액세스 할 수 있습니다.
$scope.dummy.customerForm
그리고 당신은 같은 일을 할 수있을 것입니다
$scope.dummy.customerForm.$setPristine()
가있는 ‘.’ 모델에서 프로토 타입 상속이 작동하는지 확인합니다. 따라서
<input type="text" ng-model="someObj.prop1">
오히려 사용하십시오<input type="text" ng-model="prop1">
프리미티브를 실제로 사용하고 싶다면 두 가지 해결 방법이 있습니다.
1. 하위 범위에서 $ parent.parentScopeProperty를 사용하십시오. 이렇게하면 자식 범위가 자체 속성을 만들 수 없습니다. 부모 범위에서 함수를 정의하고 자식에서 호출하여 기본 값을 부모에게 전달하십시오 (항상 가능한 것은 아님)
답변
이 답변은 약간 늦었지만 모든 것을 훨씬 쉽게 만드는 솔루션을 발견했습니다.
controllerAs 구문을 사용하는 경우 실제로 폼 이름을 컨트롤러에 직접 할당 한 다음 “this”변수에서 참조 할 수 있습니다. 코드에서 수행 한 방법은 다음과 같습니다.
ui-router를 통해 컨트롤러를 구성했습니다 (그러나 HTML에서도 직접 원하는 <div ng-controller="someController as myCtrl">
대로 할 수 있습니다) ui-router 구성에서 다음과 같이 보일 수 있습니다.
views: {
"": {
templateUrl: "someTemplate.html",
controller: "someController",
controllerAs: "myCtrl"
}
}
그런 다음 HTML에서 양식 이름을 “controllerAs”. “name”으로 설정합니다.
<ng-form name="myCtrl.someForm">
<!-- example form code here -->
<input name="firstName" ng-model="myCtrl.user.firstName" required>
</ng-form>
이제 컨트롤러 내부에서 매우 간단하게 수행 할 수 있습니다.
angular
.module("something")
.controller("someController",
[
"$scope",
function ($scope) {
var vm = this;
if(vm.someForm.$valid){
// do something
}
}]);
답변
예, 컨트롤러에서 양식에 액세스 할 수 있습니다 ( docs에 설명 된대로 ).
양식이 컨트롤러 범위에 정의 되지 않고 대신 하위 범위에 정의 된 경우를 제외하고 .
기본적으로, 어떤 각도 지시어는 같은 ng-if
, ng-repeat
또는 ng-include
, 격리 된 자식 범위를 만들 것입니다. scope: {}
속성이 정의 된 모든 사용자 지정 지시문도 마찬가지입니다 . 아마도 기초 구성 요소도 방해가 될 수 있습니다.
태그 ng-if
주위 에 간단한 것을 소개 할 때도 같은 문제가있었습니다 <form>
.
자세한 내용은 다음을 참조하십시오.
참고 : 질문을 다시 작성하십시오. 귀하의 질문에 대한 답변은 예 이지만 귀하의 문제는 약간 다릅니다.
컨트롤러에서 하위 범위의 양식에 액세스 할 수 있습니까?
대답은 간단합니다 : no .