1

2 つの条件に基づいて ng-show を使用することは可能ですか。この場合は 3 つの条件だと思います。おそらく関数またはディレクティブを使用してこれを実行できることはわかっていますが、ビューをロードし、ng-repeat を使用して動的に生成されたフォーム要素にデータを伝播する場合です。実際の入力は無効とマークされておらず、フォーム自体は引き続き有効として送信されるため、この時点で条件を ng-show に追加する方が簡単です。フォームが最初に動的に作成されたフォームの最後の要素をロードすると、$touched = true および $veiwValue が変更されるまで無効であるかのようにエラー メッセージが表示されます。

簡単にするために、私の ng-show は次のようになります。

<div class="list-help-block" ng-messages="emails_form.email.$error" ng-show="emails_form.email.$dirty || emails_form.email.$invalid">
    <div ng-messages-include="/app/views/messages.html" ></div>
</div>

これにより、無効なエントリとフォーム送信時のエラーに関するエラー メッセージが表示されます。ただし、フォームの読み込み時にエラー メッセージ (エラーであってはならない) も表示されます。そして、最後の入力でフォームに動的に追加されました。

私がやりたいことは次のようなものです:

ng-show="emails_form.email.$dirty || emails_form.email.$invalid NOT mails_form.email.$pristine"

それが可能かどうか、またはビューが完全にロードされてデータがモデルに追加されたら、関数を呼び出して検証を修正できるかどうかさえわかりません。助言がありますか?

これに使用されるセクション全体を次に示します。

<div ng-repeat="emails in info.instructor.instructor_emails">
    <ng-form name="emails_form" novalidate>
        <div class="input-group">
            <span class="input-group-label">
            <span ng-show="info.instructor.instructor_emails.length==1">@</span>
            <span ng-show="info.instructor.instructor_emails.length>=2"><a ng-click="updateRemoveEmail($index)"><i class="fi-x"></i></a></span>
        </span>                                             
    <input ng-class="{ notvalid: submitted && emails_form.email.$invalid }"type="email" placeholder="jane.doe@example.com" name="email" ng-model="emails.email" ng-required="info.instructor.instructor_emails.length>=2"/>
    </div>
    <div class="list-help-block" ng-messages="emails_form.email.$error" ng-if="!emails_form.email.$pristine && (emails_form.email.$dirty || emails_form.email.$invalid)">
    <div ng-messages-include="/app/views/messages.html" ></div>
</div>

4

2 に答える 2

3

ngIf提案として、代わりにを使用することをお勧めしますngShow

私があなたを理解したようにNOT、それはうまくいくはずです:

ng-if="!emails_form.email.$pristine && (emails_form.email.$dirty || emails_form.email.$invalid)"
于 2016-07-21T23:08:16.987 に答える