2017-02-14 7 views
-2

私はクリック時にフィールドを動的に追加しました。私は必要なもの形式を確認するanglejsフィールドは同じではない

 addNewFiled() { 
     let parent = this; 
     this.scope.fields.push({ 

      key: 'field-'+parent.scope.fields.length, 
      type: 'horizontalInput', 
      templateOptions: { 
       placeholder :'Enter Field', 
       label: 'Filed', 
       required: false 
      }, 
      validators: { 
       fieldFormat: function($viewValue, $modelValue, scope) { 

        let value = $viewValue; 
        if(value.length != 12){ 
         scope.to.message = "Field should be 12 characters"; 
         return false; 
        } 

        return true; 
       } 
      } 

     }); 


    } 

が入力された値がバリデータで別のフィールドではありません検証することですが、私は任意のヘルプは高く評価され、モデルをループしようとしたが、その効率的ではありません。

答えて

1

私は2回のマップを使用してこの問題を解決しました。 基本的に、2つのマップがあり、1つのフィールドにはそのフィールドのインデックスが含まれ、2つ目のマップには値その値の繰り返し数にマッピングされたフィールドの値 バリデーターでは、(他のバリデーションを行った後で)以前の値の繰り返し回数を減らし、新しい値の繰り返し回数を増やして、 1を超えると繰り返されます。あなたのダイアログで

があなたのフィールドで

private valuesMap: any = []; 
    private keysArray:any = []; 

2つのマップを定義し、あなたのバリデータで、その後

if(value) { 


     if(angular.isDefined(parent.valuesMap[parent.keysArray[scope.index]])) { 
      parent.valuesMap[parent.keysArray[scope.index]]= parent.valuesMap[parent.keysArray[scope.index]] -1; 

     } 

     parent.keysArray[scope.index] = value; 
     if(angular.isDefined(parent.valuesMap[value]) && parent.valuesMap[value] > 0) { 
      parent.valuesMap[value] = parent.valuesMap[value]+1; 
      scope.to.message = "Value is already entered"; 
      return false; 
     } 
     parent.valuesMap[value] = 1; 


    } 
を現在のフィールドのインデックス

 controller: function ($scope) { 
       $scope.index = parent.scope.fields.length-1; 
       parent.keysArray[$scope.index] = $scope.index; 
      }, 

を保存するためのコントローラを注入します

ご希望のシナリオでご利用いただけます。

+0

ありがとうございました、私はそれが完全に働いたありがとう –

+0

このソリューションをしようとします! –

-1

これにバリデーターは必要ありません。すでに、templateOptionsのminlengthプロパティとmaxlengthプロパティでフィールド長のデフォルト検証が行われています。

は、単純に次の操作を行います。

templateOptions: { 
       placeholder :'Enter Field', 
       label: 'Filed', 
       required: false, 
       minlength: 12, 
       maxlength: 12 
      }, 
+0

私は自分のメッセージを指定するためにこれをやっていますが、問題は長さに関するものではなく、すべてのフィールドが同じでないことを確認することでした。 –

+0

なぜこれがダウン表示されていますか?答えは正しい。私は職場で終日働いています。私が何を話しているのかよく分かります。あなたは単にこれを達成するフィールドにウォッチャーを置くことができます。 – MattE

+0

2つ以上のフィールドに同じ値があるかどうかを確認します。 –