2017-01-18 46 views
0

我有三个下拉列表: -如何使用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

如果先选择一个,在第二个和第三个中,那么我也会得到错误 –

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

是的,你应该。 –