programing

컨트롤러의 양식에 액세스할 수 있습니까?

javamemo 2023. 3. 16. 21:04
반응형

컨트롤러의 양식에 액세스할 수 있습니까?

저는 현재 다음을 사용하고 있습니다.

$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()

Wiki 링크

모델에 '.'를 붙이면 프로토타입 상속을 확실하게 할 수 있습니다. 이렇게 '아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아'<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

반응형