AngularJs가 컨트롤러($scope)의 양식 개체에 액세스할 수 없습니다.
보다 구체적으로 bootstrap-ui를 사용하고 있습니다.모달에 폼이 있는데 폼 검증 오브젝트를 인스턴스화 하고 싶습니다.기본적으로는 이렇게 하고 있습니다.
<form name="form">
<div class="form-group">
<label for="answer_rows">Answer rows:</label>
<textarea name="answer_rows" ng-model="question.answer_rows"></textarea>
</div>
</form>
<pre>
{{form | json}}
</pre
html 파일에서는 폼 오브젝트를 문제없이 볼 수 있지만, 컨트롤러에서 폼 검증 오브젝트에 접속하고 싶은 경우.그냥 빈 물체를 출력할 뿐이죠다음으로 컨트롤러의 예를 나타냅니다.
.controller('EditQuestionCtrl', function ($scope, $modalInstance) {
$scope.question = {};
$scope.form = {};
$scope.update = function () {
console.log($scope.form); //empty object
console.log($scope.question); // can see form input
};
});
할 수 입니까?$scope.form★★★★★★★★★★★★?
★★★★★★★★★★★★★★★★를 하지 않는 으로 하고 있습니다.$scope, '''가 아니라this컨트롤러에서 폼 이름 앞에 컨트롤러 에일리어스를 추가해야 합니다.예를 들어 다음과 같습니다.
<div ng-controller="ClientsController as clients">
<form name="clients.something">
</form>
</div>
컨트롤러에서 다음을 수행합니다.
app.controller('ClientsController', function() {
// setting $setPristine()
this.something.$setPristine();
};
그것이 전체적인 답변에도 도움이 되기를 바랍니다.
ng-controller가 폼 요소의 부모일 경우 일반적인 방법: 다음 행을 삭제하십시오.
$scope.form = {};
angular로 하는 $scope을 사용하다
OP op op op op op op op op op op 。는 는는 he he he he를 쓰고 있다$modal.open컨트롤러는 폼의 부모가 아닙니다.나는 좋은 해결책을 모른다.을 사용하다
<form name="form" ng-init="setFormScope(this)">
...
컨트롤러에서 다음을 수행합니다.
$scope.setFormScope= function(scope){
this.formScope = scope;
}
이후 업데이트 기능:
$scope.update = function () {
console.log(this.formScope.form);
};
angular ui 부트스트랩의 '모달' 소스 코드를 보면 지시어가
transclude: true
즉, 모달 창은 명령어 범위의 형제로서 컨트롤러 $scope를 부모로 하는 새로운 자 스코프를 만듭니다.그러면 새로 만든 하위 범위에서만 '양식'에 액세스할 수 있습니다.
하나의 솔루션은 다음과 같은 컨트롤러 범위에서 변수를 정의하는 것입니다.
$scope.forms = {};
그리고 폼명은 다음과 같은 것을 사용합니다.forms.formName1할 수 있습니다.이렇게 하면, 「」로 전화하는 할 수 .$scope.forms.formName1.
이것은 JS의 상속 메커니즘이 원형 체인이기 때문에 작동합니다.하려고 할 때forms.formName1먼저 폼 오브젝트를 자체 범위 내에서 찾으려 합니다.이 오브젝트는 즉석에서 작성되기 때문에 전혀 존재하지 않습니다. 부모되어 있기 '보다 낫다'(이렇게 하다)를 사용합니다.여기에서는 컨트롤러 범위에서 정의된 것을 사용하고 있습니다.'forms를 하기 위해 formName1그 결과 컨트롤러에서 다음과 같은 작업을 수행할 수 있습니다.
if($scope.forms.formName1.$valid){
//if form is valid
}
트랜슬레이션에 대한 자세한 내용은 아래 Misco의 비디오를 45분 동안 보십시오.(이것은 내가 지금까지 발견한 것 중 가장 정확한 스코프일 것입니다!!!)
www.youtube.com/watch?v=WqmeI5fZcho
ng-init 트릭은 필요 없습니다.문제는 다음과 같습니다.$scope.form컨트롤러 코드 실행 시 설정되지 않습니다.를 삭제합니다.form = {}초기화하고 워치를 사용하여 폼에 액세스합니다.
$scope.$watch('form', function(form) {
...
});
나는 문서화된 접근법을 사용한다.
https://docs.angularjs.org/guide/forms
따라서 "저장"을 클릭할 때 폼 이름을 파라미터로 전달하고 저장 메서드에서 사용 가능한 hey presto 폼을 전달합니다(여기서 formScopeObject는 폼에서 설정한ng-models 사양에 따라 greate됩니다.또한 편집 중인 아이템을 저장하는 오브젝트입니다.즉, 사용자 계정).
<form name="formExample" novalidate>
<!-- some form stuff here -->
Name
<input type="text" name="aField" ng-model="aField" required="" />
<br /><br />
<input type="button" ng-click="Save(formExample,formScopeObject)" />
</form>
사용자 1338062에 의한 답변을 확대하려면: 컨트롤러에서 무언가를 초기화하기 위해 여러 번 사용했지만 실제로 사용할 수 있을 때까지 기다려야 하는 솔루션:
var myVarWatch = $scope.$watch("myVar", function(){
if(myVar){
//do whatever init you need to
myVarWatch(); //make sure you call this to remove the watch
}
});
Angular 1.5를 사용하는 사용자의 경우, 저의 솔루션은 $postlink 스테이지에서 $watching 폼을 보는 것이었습니다.
$postLink() {
this.$scope.$watch(() => this.$scope.form.$valid, () => {
});
}
언급URL : https://stackoverflow.com/questions/21574472/angularjs-cant-access-form-object-in-controller-scope
'source' 카테고리의 다른 글
| ReactJs - 새로운 useStateRespect 후크의 preState? (0) | 2023.03.25 |
|---|---|
| Wordpress에서 사용자 지정 페이지 표시 Permalink를 만드는 방법 (0) | 2023.03.25 |
| do_action 단축 코드가 있는 Visual Composer 그리드가 작동하지 않습니다. (0) | 2023.03.25 |
| Spring Tool Suite IDE에서 프로젝트를 다시 도입하려고 할 때 8080 포트가 이미 문제가 발생함 (0) | 2023.03.25 |
| 가장 쉬운 각도 통과 방법지시어에서 컨트롤러로의 JS 범위 변수 (0) | 2023.03.25 |