2017-01-02 8 views
0

電話番号を取得するためのこの単純すぎる指令があります。電話番号が10桁未満の場合、NGモデルを無効にします。私は$ setValidityをテストしていましたが、それは関数ではないとは言いません。指示文のng-modelの有効性を設定するにはどうすればよいですか?

angular.module('valkyrie').directive('phonenumber', function(){ 

return{ 
scope: {phonemodel: '=model'}, 
template: '<input ng-model="inputValue" type="tel" class="form-control">', 
link: function(scope, element, attributes){ 
    scope.$watch('inputValue', function(value, oldValue) { 
    value = String(value); 
    var number = value.replace(/[^0-9]+/g, ''); 
    scope.phonemodel = number; 
    scope.phonemodel.$setValidity('phone', false); 
    console.log(scope.phonemodel); 
    }); 
}, 
} 
}); 
+1

私は '{必要です:「ngModel」}あなたが必要だと思う'、その後ngModelControllerが必要ですが、指定されたときにリンク機能に第四引数になるコントローラの配列の要素になります。それで$ setValidityを呼び出します。これを参照してくださいhttp://stackoverflow.com/questions/22726735/angular-setvalidity-not-working –

+0

うーん、正確には、 "NGモデル無効"とはどういう意味ですか?あなたは、入力を有効にしたいのですか?もしそうなら、それを行うにはいくつかの方法がありますが、おそらく最も "角度のある" 1.xの方法は "フィルタ"を使うことでしょう。 「角度jsフィルター電話番号」を検索すると、いくつかの例が表示されます。私はあなたがなぜモデルを無効にしたいのか理解できないかもしれません。フィルタはマークアップとコードビハインドの両方で使用でき、値などをチェックしたり拒否したりするのに適しています。 –

答えて

0

Aluanハダッドはコメントで述べたように、あなたはあなたのディレクティブ内ngModelディレクティブを必要とする必要があります。それはngModelControllerへのアクセスを提供し、次にngModelController.$setValidityを行うことができます。

こちらのデモのデモは、http://codepen.io/miparnisari/pen/LxPoVwをご覧ください。

angular.module('valkyrie', []) 
    .controller('parent', function ($scope) { 
    $scope.phone = ''; 
}) 
    .directive('phonenumber', function() { 
    return { 
    require: 'ngModel', 
    template: '<input ng-model="inputValue" type="tel" class="form-control">', 
    link: function(scope, element, attributes, ctrl) { 
     scope.$watch('inputValue', function(value, oldValue) { 
     if (!value) return; 
     scope.ngModel = value.replace(/[^0-9]+/g, ''); 
     if (scope.ngModel.length < 10) 
      ctrl.$setValidity('phoneLength', false); 
     else 
      ctrl.$setValidity('phoneLength', true); 
     }); 
    }, 
    }; 
}); 
関連する問題