1

これをどう説明したらいいのかよくわかりませんが、ベストを尽くすつもりです。

http://plnkr.co/edit/mbKvRoXl92f4zPJLxRGJ?p=preview

TLDR バージョン:

  1. 必要な属性を満たすために、ドロップダウン メニューから「abcdefg@yahoo.com」を選択します。
  2. 「自宅のメール」入力欄から「abcdefg@yahoo.com」を削除します。
  3. ドロップダウン メニューでメールが選択されていないことに注意してください。ただし、required 属性はまだ満たされています。

ロングワインドバージョン

私が持っているのは、配列 ($scope.contact.emails) 内のオブジェクトに関連付けられているいくつかの入力フィールドです。次に、これらのオブジェクトを含む配列が select 要素に関連付けられます。select 要素には、現在選択されている配列のオブジェクトを含む ng-model ディレクティブがあります。

ページがロードされるとき、何も選択されていないため、select に関連付けられた ng-model (default_email) は定義されておらず、select 要素の横に「必須」テキストが表示されます。

「メール」フィールドは必須ですが、「自宅のメール」フィールドは必須ではないことに注意してください。ドロップダウンで、「優先する電子メール」が「自宅の電子メール」フィールド (abcdefg@yahoo.com) の電子メールであることを選択すると、選択要件が満たされ、連絡先オブジェクトの default_email プロパティに次のオブジェクトが割り当てられます。そのフィールド (default_email":{"id":"home_email","name":"Home Email","address":"abcdefg@yahoo.com"})

ここに問題があります。「自宅の電子メール」入力ボックスの内容を削除して空にすると、選択が「優先電子メールを選択してください」に変わりますが、オブジェクトはまだ連絡先オブジェクトの default_email プロパティに割り当てられています、入力で指定された type="email" の要件を満たさなくなったため、プロパティ "address" が欠落しています。本当の問題は、「必須」ラベルを表示する必要があることですが、そうではありません。これは、default_email が定義されているためです。それに割り当てられたオブジェクトだけに、実際に必要なプロパティ、つまり「アドレス」がありません。

どんな助けでも大歓迎です。より多くの詳細や説明が役立つかどうかを教えてください。本当にAngularが初めてなので、しばらくお待ちください。

4

1 に答える 1

0

フォームにフォームがあるため、外部フォームcontactFormには internal: が表示されませんng-form="innerForm"

デザインが良いかどうかはわかりません。

しかし、いくつかの回避策:

コントローラーに追加:

 $scope.isRequired = function(){
  return $scope.isRequiredBool;
 };

 $scope.isEmpty = function(value){
   if(value == ''){
     $scope.isRequiredBool = true;
  } 
};

|| isRequired()その後、に追加ng-show

<span ng-show="contactForm.default_email.$error.required || isRequired()" class="help-block">Required</span>

その後、入力に追加ng-change="isEmpty(email.address)"innerFormます。

それはうまくいくはずです:

Your modified Plunker

お役に立てば幸いです。

于 2013-09-19T21:14:40.220 に答える