<form>을 둘러싸 지 않는 AngularJS <input> 유효성 검사


99

Angular <input>에서 양식의 유효성을 검사하는 것과 유사한 방식으로 격리 된 단일 유효성을 검사 할 수 있습니까? 나는 다음과 같은 것에 대해 생각하고 있습니다.

<div class="form-group">
    <input name="myInput" type="text" class="form-control" ng-model="bindTo" ng-maxlength="5">
    <span class="error" ng-show="myInput.$error.maxlength">Too long!</span>
</div>

위의 예는 작동하지 않습니다. A의 그것을 둘러싸 <form>및 교체 ng-show와 함께하는 ng-show="myForm.myInput.$error.maxlength"데 도움이됩니다.

사용하지 않고 할 수 <form>있습니까?


2
시도해 보셨습니까? 나는 각도가를 생성 생각은하지만 생각하지 않는 form.FormController형태의 입력 상태, 같은 물건을 추적 뒤에서 valid\invalid & dirty\pristine. docs.angularjs.org/api/ng/type/form.FormController
meconroy

답변:


184

ng-form 각도 지시문 ( 여기 문서 참조 )을 사용하여 html 양식 외부에서도 모든 것을 그룹화 할 수 있습니다. 그런 다음 각도 FormController를 활용할 수 있습니다.

<div class="form-group" ng-form name="myForm">
    <input name="myInput" type="text" class="form-control" ng-model="bindTo" ng-maxlength="5">
    <span class="error" ng-show="myForm.myInput.$error.maxlength">Too long!</span>
</div>


이 답변을 수락했습니다. 즉 :) 대답은 너무 조금 늦게 온 비록 내가 찾고 있던 무슨
보이 테크

1
이것은 나에게도 도움이되었습니다. 나는 내 머리카락을 뽑아 내고 이걸 우연히 발견했다. 감사합니다!
Alex McCabe 2015 년

1
버튼의 ng-click 이벤트에서 이러한 양식의 유효성을 검사하려는 향후 독자는 여기를 참조하십시오. stackoverflow.com/a/24123379/1371408
Matty J

개별 검증 예제와 다중 입력 plnkr.co/edit/wuOExkq4LXEiDELm2C6E?p=preview
나단 Redblur

@SilvioLucas-필드가 비어 있어도 예제가 여전히 "실행"됩니다 ...?
colmde

0

루프에서 반복하고 양식 이름과 유효한 상태를 보간 할 수 있어야하는 경우 Silvio Lucas의 답변을 기반으로합니다.

<div
  name="{{propertyName}}"
  ng-form=""
  class="property-edit-view"
  ng-class="{
    'has-error': {{propertyName}}.editBox.$invalid,
    'has-success':
      {{propertyName}}.editBox.$valid &&
      {{propertyName}}.editBox.$dirty &&
      propertyValue.length !== 0
  }"
  ng-switch="schema.type">
  <input
    name="editBox"
    ng-switch-when="int"
    type="number"
    ng-model="propertyValue"
    ng-pattern="/^[0-9]+$/"
    class="form-control">
  <input
    name="editBox"
    ng-switch-default=""
    type="text"
    ng-model="propertyValue"
    class="form-control">
  <span class="property-type" ng-bind="schema.type"></span>
</div>

-4
<!DOCTYPE html>
<html ng-app="plunker">
<head>
    <meta charset="utf-8" />
    <title>AngularJS Plunker</title>
    <script>document.write('<base href="' + document.location + '" />');</script>
    <link rel="stylesheet" href="style.css" />
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.5/angular.min.js">   </script>

</head>

<body ng-controller="MainCtrl">
    <div class="help-block error" ng-show="test.field.$error.required">Required</div>
    <div class="help-block error" ng-show="test.firstName.$error.required">Name Required</div>
    <p>Hello {{name}}!</p>
    <div ng-form="test" id="test">
        <input type="text" name="firstName" ng-model="firstName" required> First name <br/> 
        <input id="field" name="field" required ng-model="field2" type="text"/>
    </div>
</body>
<script>
    var app = angular.module('plunker', []);

    app.controller('MainCtrl', function($scope) {
      $scope.name = 'World';
      $scope.field = "name";
      $scope.firstName = "FirstName";
      $scope.execute = function() {
        alert('Executed!');
      }
    });

</script>


1
이것은 stackoverflow.com/a/25342654/2333214 와 다른가요 ? 그렇다면 차이점에 대한 설명을 추가 할 수 있습니까?
TJ

그리고 설명?
Maximiliano Becerra
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.