Angularjs angualrjs,查找重复作为输入验证,ng repeat,ng表单嵌套在表单下

Angularjs angualrjs,查找重复作为输入验证,ng repeat,ng表单嵌套在表单下,angularjs,angularjs-ng-form,Angularjs,Angularjs Ng Form,我试图在文本框中找到重复的输入值,该文本框检查ng-change上的每个输入值。然后显示消息“sos编号有匹配项”。尝试了这一项,但仍按顺序对生成列表数据进行排序。结果,常规消息 到目前为止我没有成功。以下是代码: html代码: <form name="settingForm" ng-submit="mangeDeviceSettings()"><div class="form-group"> <

我试图在文本框中找到重复的输入值,该文本框检查ng-change上的每个输入值。然后显示消息“sos编号有匹配项”。尝试了这一项,但仍按顺序对生成列表数据进行排序。结果,常规消息 到目前为止我没有成功。以下是代码:

html代码:

<form name="settingForm" ng-submit="mangeDeviceSettings()"><div class="form-group"> 
                                 <div data-ng-repeat="i in sosLength track by $index">
                                 <ng-form name="sosNumForm">
                                    <span class="input-icon"> <input type="text" ng-disabled="!showPendingStatus" watch-change="change()"
                                      class="form-control" name="SOSNumber"  ng-minlength="10" ng-maxlength="13" placeholder="SOSNumber{{$index+1}} No." ng-pattern="/^[0-9]+$/"
                                      ng-model="deviceSettings.sos[$index]" ng-change="sosChange($index,this)">
                                      <i class="fa fa-mobile"></i></span>
                                      <span ng-show="IsMatch{{$index}} && sampleSOS && sosNumForm.SOSNumber.$dirty">SOS Number has a match!</span>
                                      <span ng-show="(sosNumForm.SOSNumber.$error.minlength || sosNumForm.SOSNumber.$error.maxlength) && sosNumForm.SOSNumber.$dirty">Mobile Number must be between 10 and 13 digits </span>
                                      <span ng-show="!sosNumForm.SOSNumber.$error.minlength && !sosNumForm.SOSNumber.$error.maxlength && sosNumForm.SOSNumber.$error.pattern && sosNumForm.SOSNumber.$dirty">Number must contain only numbers</span>
                                  </ng-form>
                                </div>
                              </div>
                          </div></form>

SOS号码匹配!
手机号码必须介于10到13位之间
数字必须只包含数字
ng变更方法:

$scope.sosChange=function(idx, obj){
    $scope.sampleSOS = true;
    $scope.fnfDuplicate=true; 
    obj.$parent.settingForm.$valid = obj.sosNumForm.$valid;
    // console.log(obj.$parent.settingForm.$valid); 
    // console.log(obj.sosNumForm.$valid);
    console.log($scope.deviceSettings.sos[idx]);
    console.log($scope.deviceSettings.sos[i] );
    // console.log(obj.sosNumForm.$valid);
    //  console.log($scope.deviceSettings.sos[idx]!="");
    for (var i = 0; i < 3; i++) {
        if(idx != i ){
            if ($scope.deviceSettings.sos[idx] == $scope.deviceSettings.sos[i] 
                && obj.sosNumForm.$valid && $scope.deviceSettings.sos[idx]!="") {                    
                if(idx==0){
                    $scope.IsMatch0=true;  $scope.sosDuplicate=true;               
                    return false;
                }
                if(idx==1){
                    $scope.IsMatch1=true;  $scope.sosDuplicate=true;               
                    return false;
                }
                if(idx==2){
                    $scope.IsMatch2=true;  $scope.sosDuplicate=true;               
                    return false;
                }                    
            }
            else{
                if(idx==0){
                    $scope.IsMatch0=false;  $scope.sosDuplicate=false;
                    return false;
                }
                if(idx==1){
                    $scope.IsMatch1=false;  $scope.sosDuplicate=false;
                    return false;
                }
                if(idx==2){
                    $scope.IsMatch2=false;  $scope.sosDuplicate=false;
                    return false;
                }
            }  
            // $scope.sosDuplicate=true;               
        }                        
    }
}
$scope.sosChange=函数(idx,obj){
$scope.sampleSOS=true;
$scope.fnfDuplicate=true;
obj.$parent.settingForm.$valid=obj.sosNumForm.$valid;
//console.log(对象$parent.settingForm.$valid);
//console.log(obj.sosNumForm.$valid);
log($scope.deviceSettings.sos[idx]);
console.log($scope.deviceSettings.sos[i]);
//console.log(obj.sosNumForm.$valid);
//console.log($scope.deviceSettings.sos[idx]!=”);
对于(变量i=0;i<3;i++){
if(idx!=i){
if($scope.deviceSettings.sos[idx]==$scope.deviceSettings.sos[i]
&&obj.sosNumForm.$valid&&$scope.deviceSettings.sos[idx]!=“”){
如果(idx==0){
$scope.IsMatch0=true;$scope.sosdupplicate=true;
返回false;
}
如果(idx==1){
$scope.IsMatch1=true;$scope.sosdupplicate=true;
返回false;
}
如果(idx==2){
$scope.IsMatch2=true;$scope.sosdupplicate=true;
返回false;
}                    
}
否则{
如果(idx==0){
$scope.IsMatch0=false;$scope.sosdupplicate=false;
返回false;
}
如果(idx==1){
$scope.IsMatch1=false;$scope.sosdupplicate=false;
返回false;
}
如果(idx==2){
$scope.IsMatch2=false;$scope.sosdupplicate=false;
返回false;
}
}  
//$scope.sosdupplicate=true;
}                        
}
}

如果我理解正确,您只需要验证两个字段是否具有相同的值。。。喜欢密码和确认密码。。。我会用它粘贴一个代码片段(密码和确认密码),但我相信你可以从那里得到你需要的

我也不认为需要更改,因为这两个项目都在范围内,所以如果它们不相等,您只需要进行验证

<div class="form-group required" ng-class="{ 'has-error' : changePasswordForm.password.$invalid && submitted}">
        <label class="col-md-3 control-label">New Password </label>
        <div class="col-md-8">
            <input class="form-control" name="password" ng-model="user.password" ng-minLength="6" type="password" required>
            <p ng-show="changePasswordForm.password.$error.minlength && submitted" class="help-block">Password must be atleast 6 characters long.</p>
            <p ng-show="changePasswordForm.password.$error.required && !changePasswordForm.password.$error.minlength && submitted" class="help-block">Password is required.</p>
        </div>
    </div>
    <div class="form-group required" ng-class="{ 'has-error' : (changePasswordForm.confPassword.$invalid || user.password!== user.confPassword) && submitted}">
        <label class="col-md-3 control-label">Confirm password </label>
        <div class="col-md-8">
            <input class="form-control" name="confPassword" ng-model="user.confPassword" type="password" required>
            <p ng-show="changePasswordForm.confPassword.$invalid && submitted" class="help-block">This field is required.</p>
            <p ng-show="changePasswordForm.confPassword.$valid && user.password!== user.confPassword && submitted" class="help-block">Passwords must match.</p>
        </div>
    </div>
html代码:

<div class="form-group"> <!-- <div data-ng-repeat="i in sosLength track by $index"> -->
                                 <div data-ng-repeat="i in persons track by $index">
                                 <ng-form name="sosNumForm">
                                    <span class="input-icon"> <input type="text" ng-disabled="!showPendingStatus" watch-change="change()"
                                      class="form-control" name="SOSNumber"  ng-minlength="10" ng-maxlength="13" placeholder="SOSNumber{{$index+1}} No." ng-pattern="/^[0-9]+$/"
                                      ng-model="deviceSettings.sos[$index]" ng-change="sosChange(this,deviceSettings.sos[$index])">
                                      <i class="fa fa-mobile"></i></span>
                                      <!-- <span ng-show="IsMatch{{$index}} && sampleSOS && sosNumForm.SOSNumber.$dirty">SOS Number has a match!</span> -->
                                      <span ng-if="i.isDuplicate"> SOS Number has a match!</span>
                                      <span ng-show="(sosNumForm.SOSNumber.$error.minlength || sosNumForm.SOSNumber.$error.maxlength) && sosNumForm.SOSNumber.$dirty">Mobile Number must be between 10 and 13 digits </span>
                                      <span ng-show="!sosNumForm.SOSNumber.$error.minlength && !sosNumForm.SOSNumber.$error.maxlength && sosNumForm.SOSNumber.$error.pattern && sosNumForm.SOSNumber.$dirty">Number must contain only numbers</span>
                                  </ng-form>
                                </div>
                              </div>

SOS号码匹配!
手机号码必须介于10到13位之间
数字必须只包含数字
JS代码:

$scope.sosDuplicate=true; 
$scope.fnfDuplicate=true; 

$scope.persons = [{sos:""},{sos:""},{sos:""}];
$scope._persons = [{fnf:""},{fnf:""}];

$scope.fnfValid = true;
$scope.sosValid = true;

$scope.sosChange=function(obj,value){
    var sorted, i;
    var count =0, checker;

    // obj.$parent.settingForm.$valid = obj.sosNumForm.$valid;
    $scope.sosValid = obj.sosNumForm.$valid;
    if(value!="undefined" || value != "")
    {
        for (var i = 0; i < 3; i++) {
            checker = parseInt($scope.deviceSettings.sos[i]);
            $scope.persons[i].sos = checker==NaN ? "" : checker;
        };


        sorted = $scope.persons.concat().sort(function (a, b) {
            if (a.sos > b.sos) return 1;
            if (a.sos < b.sos) return -1;
            return 0;
        });

        for(i = 0; i < $scope.persons.length; i++) {                    
            sorted[i].isDuplicate = ((sorted[i-1] && sorted[i-1].sos == sorted[i].sos) || (sorted[i+1] && sorted[i+1].sos == sorted[i].sos)
                || (sorted[i+2] && sorted[i+2].sos == sorted[i].sos)|| (sorted[i-2] && sorted[i-2].sos == sorted[i].sos));

            if(sorted[i].isDuplicate==true){
                count+=1;
                console.log(count);

            }
            $scope.sosDuplicate= (count>1) ? true : false;

        }

    }
}
$scope.sosdupplicate=true;
$scope.fnfDuplicate=true;
$scope.persons=[{sos:'},{sos:'},{sos:'}];
$scope._persons=[{fnf:'},{fnf:'}];
$scope.fnfValid=true;
$scope.sosValid=true;
$scope.sosChange=函数(对象,值){
var排序,i;
var计数=0,检查程序;
//obj.$parent.settingForm.$valid=obj.sosNumForm.$valid;
$scope.sosValid=obj.sosNumForm.$valid;
如果(值!=“未定义”| |值!=“”)
{
对于(变量i=0;i<3;i++){
checker=parseInt($scope.deviceSettings.sos[i]);
$scope.persons[i].sos=checker==NaN?”:checker;
};
排序=$scope.persons.concat().sort(函数(a,b){
如果(a.sos>b.sos)返回1;
如果(a.sos1)?true:false;
}
}
}

谢谢您的回答,但与您的回答不同,您只需检查一次匹配值密码。我每次都会检查所有其他文本字段和输入的文本字段是否重复并显示相应的消息。顺便说一句,我发现解决方法是:我看不出这会如何更改答案。。。你更新了范围。。。因此,如果作用域项不同,则创建一个返回true或false的函数。。。并删除提交的。。。这样,每次范围更改都会更新它。。。答案仍然有效
$scope.sosDuplicate=true; 
$scope.fnfDuplicate=true; 

$scope.persons = [{sos:""},{sos:""},{sos:""}];
$scope._persons = [{fnf:""},{fnf:""}];

$scope.fnfValid = true;
$scope.sosValid = true;

$scope.sosChange=function(obj,value){
    var sorted, i;
    var count =0, checker;

    // obj.$parent.settingForm.$valid = obj.sosNumForm.$valid;
    $scope.sosValid = obj.sosNumForm.$valid;
    if(value!="undefined" || value != "")
    {
        for (var i = 0; i < 3; i++) {
            checker = parseInt($scope.deviceSettings.sos[i]);
            $scope.persons[i].sos = checker==NaN ? "" : checker;
        };


        sorted = $scope.persons.concat().sort(function (a, b) {
            if (a.sos > b.sos) return 1;
            if (a.sos < b.sos) return -1;
            return 0;
        });

        for(i = 0; i < $scope.persons.length; i++) {                    
            sorted[i].isDuplicate = ((sorted[i-1] && sorted[i-1].sos == sorted[i].sos) || (sorted[i+1] && sorted[i+1].sos == sorted[i].sos)
                || (sorted[i+2] && sorted[i+2].sos == sorted[i].sos)|| (sorted[i-2] && sorted[i-2].sos == sorted[i].sos));

            if(sorted[i].isDuplicate==true){
                count+=1;
                console.log(count);

            }
            $scope.sosDuplicate= (count>1) ? true : false;

        }

    }
}