2017-07-31 12 views
2

私はAngularJSフォーム上に複数のドロップダウンリストを持っています。フォームを送信すると、ドロップダウンリストの1つだけが必要な確認を表示しています。ドロップダウンリストの唯一の違いはソースです。動かないものでは、オブジェクトを使用し、オプションのラベルと値を設定します。ドロップダウンでは、ソースは標準の次元配列です。誰もがオブジェクトソースが機能しない理由を知っていますか?AngularJS Validationがドロップダウンで動作しない

Plunker

<body ng-controller="MainCtrl"> 
<form name="myForm" novalidate> 
    <div style="padding: 10px"> 
    <select name="TrailerType" 
      ng-options="e as e.EquipmentDesc for e in Equipment" 
      ng-model="TrailerType" 
      required> 
    </select> 
    <p ng-show="myForm.$submitted"> 
     <span ng-show="myForm.TrailerType.$error.required">Required</span> 
    </p> 
    </div> 
    <div style="padding: 10px"> 
    <select name="Hazmat" 
      ng-options="h for h in HazmatYN" 
      ng-model="Hazmat" 
      required> 
    </select> 
    <p ng-show="myForm.$submitted"> 
     <span ng-show="myForm.Hazmat.$error.required">Required</span> 
    </p> 
    </div> 
    <button>Sumbit</button> 
</form> 
</body> 

$scope.Equipment = [ 
    { 'EquipmentDesc': 'Reefer', 'EquipmentId': 1 }, 
    { 'EquipmentDesc': 'Van', 'EquipmentId': 2 }, 
    { 'EquipmentDesc': 'Van or Reefer', 'EquipmentId': 3 }, 
    { 'EquipmentDesc': 'Flatbed', 'EquipmentId': 4 }, 
    { 'EquipmentDesc': 'StepDeck', 'EquipmentId': 5 }, 
    { 'EquipmentDesc': 'Removable Goose Neck', 'EquipmentId': 6 }, 
    { 'EquipmentDesc': 'Double Drop', 'EquipmentId': 11 }, 
    { 'EquipmentDesc': 'Tanker', 'EquipmentId': 30 }, 
    { 'EquipmentDesc': 'Rail/IMDL', 'EquipmentId': 34 } 
]; 

$scope.HazmatYN = ['Yes', 'No']; 

$scope.TrailerType = {}; 
$scope.Hazmat = ""; 

答えて

0

フォーム名は、あなたの最初のドロップダウンのために間違っています。あなたが、私はこの質問への実際のコードを変換するタイプミスがあったという点で正しかったhttp://plnkr.co/edit/9EF1cJRRmK3rTDmh4cWE?p=preview

+0

:それは「myForm

<p ng-show="myForm.$submitted"> <span ng-show="myForm.TrailerType.$error.required">Required</span> </p> 

ワーキングデモでなければなりません。コードを修正し、表示されたコードに初期化を追加しました。問題は、コントローラのデフォルト値が{}に設定されていて、 ""に設定されていないように見えます。なぜこれが問題なのか? – ddelella

+0

何のデフォルト値ですか?あなたのngモデルをオブジェクトにバインドすることをお勧めします。例えば、TrailerType.val、Hazmat .val、コントローラーでオブジェクトを初期化することを忘れないでください。オブジェクトを使用する方が良い理由は、ここで理解できます。https://stackoverflow.com/questions/18128323/if-you-are-not-using-a-dot-in-your-angularjs-models-you- are-doing-it-wrong – Vivz

+0

これは問題のアイデアを得るための簡単な例です。実際のコードでは、ngModalをオブジェクトに設定しています。私が参照している初期化は、コントローラで発生し、オブジェクトの値を{}に設定します(私が提供したコードを参照)。このようにオブジェクトのデフォルトが設定されている場合、必要なHTMLバリデータは機能しません。それを空の文字列に設定すると、うまく動作します。 {}がうまくいかない理由があるかどうか不思議です。 – ddelella

関連する問題