2017-01-18 3 views
0

私は3つのドロップダウン持っている: - 通知を受けるていない場合は、私が欲しいものlodashフィルターの使い方は?

<form name="myForm" data-ng-submit="save(myForm.$valid)"novalidate="novalidate"> 
    <label>1st</label> 
     <select ng-model="a.value[0]"> 
      <option value="One">One</option> 
      <option value="Two">Two</option> 
      <option value="Three">Three</option> 
     </select> 
    <label>2nd</label> 
    <select ng-model="a.value[1]"> 
      <option value="One">One</option> 
      <option value="Two">Two</option> 
      <option value="Three">Three</option>        
    </select> 
    <label>3rd</label> 
     <select ng-model="a.value[2]"> 
     <option value="One">One</option> 
     <option value="Two">Two</option> 
     <option value="Three">Three</option> 
     </select> 

    <button type="submit" class="btn btn-warning"><i class="fa fa-save"></i> 
      Save</button> 
    </form> 

は、ユーザが各ドロップダウンリストに一意の値を選択しています。

$scope.a.value = []; 
scope.func = function() { 
if (_.uniq(scope.a.value).length !== scope.a.value.length) { 
scope.notify("error", "Please set unique values"); 
} 
}; 

私は上記のコードを使用しましたが、正しくできませんでしたか?私が間違っていることを教えてください。または私に可能な解決策を与えてください。

また、値が一意でない場合は保存されません。どのようなバリデーションを適用すればいいですか?

+0

おそらくヨーヨー使用することを望んでいた '!=' 'ではなく==の –

+0

なしには、コンソール内の任意のエラーを持っていますか? –

+0

いずれも動作しませんでした' – Mistalis

答えて

0

使用ng-change="uniqCheck()"各選択ディレクティブで:コントローラで

 <select ng-model="a.value[0]" ng-change="uniqCheck()"> 
      <option value="One">One</option> 
      <option value="Two">Two</option> 
      <option value="Three">Three</option> 
     </select> 

が使用:

$scope.uniqCheck = function(){ 
     $log.log('this is $scope.a', $scope.a); 
     if (_.uniq($scope.a.value).length !== $scope.a.value.length) { 
      // $scope.notify("error", "Please set unique values"); 
      $window.alert("error - Please set unique values") 
     } 
    } 

これは、@ Selva.Kとして動作するはず

+0

あなたのソリューションはユニークな値であっても警告を表示しています –

+0

Uniqでは、最初に選択したユーザーをドロップダウンして他のユーザーを同じものにする必要がありますか? –

+0

いいえ最初に彼が2番目と3番目の3つで1つを選択するとエラーが発生する –

0

あなたのコードが正常に動作する必要がありますコメント - _.uniqを重複した値が削除された配列を返します。結果の長さを_.uniqと未変更の配列の結果と比較すると、値がすべて一意であるかどうかを判断できます。

Anandapriyan S.Dによって指摘されているように、あなたの検証と呼ばれていないステップがあります。

選択を変更するたびに、一意性をチェックする関数を呼び出す必要があります。

<div ng-controller="Ctrl"> 
    <label>1st</label> 
    <select ng-model="a.value[0]" ng-change="uniqCheck()"> 
     <option value="One">One</option> 
     <option value="Two">Two</option> 
     <option value="Three">Three</option> 
    </select> 
    <label>2nd</label> 
    <select ng-model="a.value[1]" ng-change="uniqCheck()"> 
     <option value="One">One</option> 
     <option value="Two">Two</option> 
     <option value="Three">Three</option> 
    </select> 
    <label>3rd</label> 
    <select ng-model="a.value[2]" ng-change="uniqCheck()"> 
     <option value="One">One</option> 
     <option value="Two">Two</option> 
     <option value="Three">Three</option> 
    </select> 
    </div> 


function Ctrl($scope) { 
    // not sure why you are nesting values onto a, unless a has more important information 
    // you could just use $scope.a = []; and then use $scope.a[0] ... 
    $scope.a = {}; 
    $scope.a.value = []; 
    $scope.notify = function(error, message) { 
    alert(error + ': ' + message); 
    } 
    $scope.uniqCheck = function() { 
    if (_.uniq($scope.a.value).length !== $scope.a.value.length) { 
     $scope.notify("error", "Please set unique values"); 
    } 
    }; 
} 

https://plnkr.co/edit/UARPwYWQGjJux9FrQwFc?p=preview

+0

コントローラにコードを書く必要はありますか? –

+0

はい、そうすべきです。 –

関連する問題