Angular에는 두 개의 단추 태그가있는 양식이 있습니다. 하나의 버튼이에 양식을 제출합니다 ng-click
. 다른 버튼은 순전히을 사용한 탐색 용 ng-click
입니다. 그러나이 두 번째 버튼을 클릭하면 AngularJS가 404를 트리거하는 페이지 새로 고침을 발생시킵니다. 함수에 중단 점을 삭제하고 함수가 트리거됩니다. 다음 중 하나를 수행하면 중지됩니다.
- 를 제거해도
ng-click
버튼이 페이지를 새로 고치지 않습니다. - 함수에서 코드를 주석 처리하면 페이지를 새로 고치지 않습니다.
- 로 버튼 태그를 앵커 태그 (
<a>
)로 변경하면href=""
새로 고침이 발생하지 않습니다.
후자는 가장 간단한 해결 방법 인 것처럼 보이지만 AngularJS가 페이지를 다시로드하게하는 함수 후에 코드를 실행하는 이유는 무엇입니까? 버그 인 것 같습니다.
형식은 다음과 같습니다.
<form class="form-horizontal" name="myProfile" ng-switch-when="profile">
<fieldset>
<div class="control-group">
<label class="control-label" for="passwordButton">Password</label>
<div class="controls">
<button id="passwordButton" class="secondaryButton" ng-click="showChangePassword()">Change</button>
</div>
</div>
<div class="buttonBar">
<button id="saveProfileButton" class="primaryButton" ng-click="saveUser()">Save</button>
</div>
</fieldset>
</form>
컨트롤러 방법은 다음과 같습니다.
$scope.showChangePassword = function() {
$scope.selectedLink = "changePassword";
};
답변
W3C 사양을 살펴보면 버튼 요소 type='button'
를 제출하지 않으려는 경우 버튼 요소를 표시하는 것이 분명 합니다.
특히 주목해야 할 것은
type 속성이 지정되지 않은 버튼 요소는 type 속성이 “submit”으로 설정된 버튼 요소와 동일한 것을 나타냅니다.
답변
기본 처리기를 방지하려고 할 수 있습니다.
html :
<button ng-click="saveUser($event)">
js :
$scope.saveUser = function (event) {
event.preventDefault();
// your code
}
답변
태그 에서 속성 ng-submit={expression}
을 선언해야 합니다 <form>
.
ngSubmit 문서에서
http://docs.angularjs.org/api/ng.directive:ngSubmit
이벤트를 제출할 때 각도 표현식을 바인딩 할 수 있습니다.
또한 기본 조치를 방지합니다 (형식의 경우 서버에 요청을 보내고 현재 페이지를 다시로드하는 것을 의미 함).
답변
기본 동작을 방지하기 위해 지시문을 사용합니다.
module.directive('preventDefault', function() {
return function(scope, element, attrs) {
angular.element(element).bind('click', function(event) {
event.preventDefault();
event.stopPropagation();
});
}
});
그런 다음 html로 :
<button class="secondaryButton" prevent-default>Secondary action</button>
이 지시어는 <a>
다른 태그 와 함께 사용할 수도 있습니다
답변
를 유지할 수는 <button type="submit">
있지만의 속성 action=""
을 제거해야합니다 <form>
.
답변
아무도 왜 가장 간단한 해결책을 제안하지 않았는지 궁금합니다.
사용하지 마십시오
<form>
A <whatever ng-form>
는 IMHO가 더 나은 작업을 수행하며 HTML 양식이 없으면 브라우저 자체에서 제출할 내용이 없습니다. 각도를 사용할 때 정확히 올바른 행동입니다.
답변
양식에 조치를 추가하십시오.
<form action="#">
