컨트롤러의 양식에 액세스할 수 있습니까?
저는 현재 다음을 사용하고 있습니다.
$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>
하지만 이것은 크롬에서만 작동합니다.이제 다음을 시도했습니다.
$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
EDIT: 이 제품은form
되지 않습니다.scope
] [ Foundation ]탭 때 합니다.
이거에 대한 해결책을 가진 사람?
할 수 는 []탭 [Foundation])이 입니다.ng-repeat
?)는 격리 스코프를 만듭니다.이 문제를 해결하는 한 가지 방법은 컨트롤러를 구문으로서 사용하는 것입니다.
<div ng-controller="MyController as ctrl">
<!-- an example of a directive that would create an isolate scope -->
<div ng-if="true">
<form name="ctrl.myForm">
...inputs
Dirty? {{ctrl.myForm.$dirty}}
<button ng-click="ctrl.saveChanges()">Save</button>
</form>
</div>
</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">
프리미티브를 정말로 사용하거나 사용할 필요가 있는 경우는, 다음의 2개의 회피책은 다음과 같습니다.
1. 자녀 범위에서 $parent.parentScopeProperty를 사용합니다.그러면 하위 범위가 고유한 속성을 만들 수 없습니다.2 .상위 스코프에서 함수를 정의하고 하위 스코프에서 호출하여 원시 값을 부모에게 전달합니다(항상 가능한 것은 아닙니다).
이 답변은 조금 늦었지만, 저는 모든 것을 훨씬 쉽게 해주는 솔루션을 우연히 발견했습니다.
controllerAs 구문을 사용하는 경우 실제로 폼 이름을 컨트롤러에 직접 할당하고 "이" 변수에서 참조할 수 있습니다.내 코드로 한 방법은 다음과 같습니다.
ui-router를 통해 컨트롤러를 설정했습니다(단, HTML에서 직접 다음과 같은 기능을 사용하여 원하는 대로 설정할 수 있습니다).<div ng-controller="someController as myCtrl">
) UI 라우터 설정에서는 다음과 같이 표시됩니다.
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
}
}]);
네, 컨트롤러의 폼에 액세스 할 수 있습니다(문서 참조).
폼이 컨트롤러 범위에서 정의되지 않고 하위 범위에서 정의되는 경우는 제외합니다.
기본적으로, 다음과 같은 몇 가지 각도 방향은ng-if
,ng-repeat
또는ng-include
는 격리된 자 스코프를 만듭니다.그럼, 어떤 커스텀 디렉티브도scope: {}
속성이 정의되어 있습니다.아마 기초 컴포넌트도 방해가 될 것입니다.
심플한 것을 소개할 때도 같은 문제가 있었습니다.ng-if
에워싸여<form>
태그를 붙입니다.
상세한 것에 대하여는, 다음을 참조해 주세요.
주의: 질문을 다시 작성할 것을 권장합니다.질문에 대한 답변은 "예"입니다. 하지만 문제는 조금 다릅니다.
컨트롤러에서 자 스코프의 양식에 액세스할 수 있습니까?
대답은 간단히 '아니오'일 것이다.
더하다ng-model="$ctrl.formName"
폼의 속성을 부여하면 컨트롤러 내에서 오브젝트로서 폼에 액세스 할 수 있습니다.this.formName
범위 내 양식에 액세스할 수 없습니다.작성되지 않았습니다.html 템플릿의 DOM은 컨트롤러 컨스트럭터처럼 약간 느리게 로드됩니다.해결책은 DOM이 로드되고 모든 스코프가 정의될 때까지 지켜보는 것입니다!
컨트롤러 내:
$timeout(function(){
console.log('customerForm:', $scope.customerForm);
// everything else what you need
});
언급URL : https://stackoverflow.com/questions/19568761/can-i-access-a-form-in-the-controller
'programing' 카테고리의 다른 글
기본 내보내기 선호 오류 (0) | 2023.03.16 |
---|---|
spring-boot-boot-boot-web과 spring-boot-boot-web의 비교 (0) | 2023.03.16 |
브라우저 인증 대화 상자를 표시하지 않으려면 어떻게 해야 합니까? (0) | 2023.03.16 |
각도 JQuery가 없는 HTML 요소 높이 가져오기JS (0) | 2023.03.16 |
UI 라우터 리졸바에서 리다이렉트 하는 방법 (0) | 2023.03.16 |