[javascript] 양식 내에서 버튼을 클릭하면 페이지를 새로 고칩니다.

Angular에는 두 개의 단추 태그가있는 양식이 있습니다. 하나의 버튼이에 양식을 제출합니다 ng-click. 다른 버튼은 순전히을 사용한 탐색 용 ng-click입니다. 그러나이 두 번째 버튼을 클릭하면 AngularJS가 404를 트리거하는 페이지 새로 고침을 발생시킵니다. 함수에 중단 점을 삭제하고 함수가 트리거됩니다. 다음 중 하나를 수행하면 중지됩니다.

  1. 를 제거해도 ng-click버튼이 페이지를 새로 고치지 않습니다.
  2. 함수에서 코드를 주석 처리하면 페이지를 새로 고치지 않습니다.
  3. 로 버튼 태그를 앵커 태그 ( <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="#">