2017-03-06 9 views
1

私はui-routerを使用しています。下の図は、'コントローラとして'構文を使用してコントローラにアクセスしています。 'shift'-radiosコンテナに無効なクラスを追加しています。フォームが読み込まれると、確認が必要です。メッセージ(requestDateおよびシフト)が表示されます。 requestDateおよびシフトが設定されていると、検証メッセージが表示されなくなります。フォームの$validがtrueです。唯一の問題は、クラスが無効で、ラジオラッパー divにあることです。私のng-classの使用に何が問題になっていますか?

私は間違っていますか?

<form novalidate ng-submit="_form.$valid && formCtrl.getFormData()" name="_form"> 
    <div class="datepicker-wrapper clearfix"> 
     <datepicker date-format="yyyy-MM-dd"> 
      <input required ng-model="formCtrl.requestDate" name="requestDate" type="text" /> 
     </datepicker>      
    </div> 
    <div ng-messages="_form.requestDate.$error" role="alert"> 
     <div ng-message="required">Введите дату</div> 
    </div> 
    <div class="radio-wrapper clearfix" ng-class="{invalid: _form.shift.$error}"> 
     <div ng-repeat="shift in formCtrl.shifts" class="item half-width pull-left"> 
      <label for="<% shift.name %>"> 
       <input required ng-model="formCtrl.currentShift" 
         name="shift" 
         ng-value="shift" 
         id="<% shift.name %>" 
         type="radio" /> 
       <span class="text"><span ng-bind="shift.text"></span></span> 
      </label> 
     </div> 
    </div> 
    <div ng-messages="_form.shift.$error" role="alert"> 
     <div ng-message="required">Укажите смену</div> 
    </div> 
    <!-- other inputs... --> 
</form> 
+1

'' ng-class = "{invalid:_form.shift。$ error}" '(**)の代わりに' ng-class = "{'invalid':_form.shift。$ error}無効**シンプル引用)? – lealceldeiro

+1

@lealceldeiroクラス名の前後にある単一引用符は、クラス名にダッシュが含まれている場合にのみ必要です。 – Lex

答えて

0

_form.shiftはありません。入力shiftはng-repeat内で宣言されているので、_formのプロパティです。あなたの問題を解決するには

ことができ、たとえば、NGリピート内でごng-classを移動し、サブグループを作成するために、ng-formを用いたシフトを参照:

<div ng-repeat="shift in formCtrl.shifts" ng-form='nestedShiftForm'> 
    <div ng-class="{invalid: nestedShiftForm.shift.$error}"> 
     <input name="shift" /> 
1

あなたng-class定義は、フォームの間違ったプロパティをチェックしていますコントローラ。あなたは真実を_form.shift.$errorにチェックしています。このオブジェクトは、検証エラーがなくても常に存在します。エラーがなければ、_form.shift.$errorの値は真実である空のオブジェクト{}です。

代わりにフォームフィールドに問題があるかどうかを正しく更新するプロパティをチェックする必要があります。

関連する問題