2

入力フィールドで有効な IP アドレスを確認するためにinput動的に作成する要素のディレクティブを作成しようとしています。ng-patternそうしようとする私の試みはすべて完全に失敗しました。他の属性を動的に変更することはできますが、ステータスng-patternに影響を与える を作成することはできません。$valid

これは私が取り組んできたコードで、動作するはずですが、ng-pattern.

app.directive('ipAddress', function($parse) {
    return {
        link: function(scope, element, attrs) {
            var model = $parse(attrs.ngPattern);
            model.assign(scope, "/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/");
            scope.$apply();
        };
});

指令:

<input ng-model="ip" ip-address required type="text" id="inputIP" placeholder="xxx.xxx.xxx.xxx">

はい、タグでng-patternインラインを指定するだけでよいことはわかっています<input>が、要点は、これをコード内で動的に実行できるようにしたいということです。<input>そこに大量の正規表現コードを埋め込まないようにして、タグをきれいに保ちたいと考えています。 .

誰でも私を助けてもらえますか?ありがとう!

4

2 に答える 2

9

コントローラーでパターンを定義してから、html で使用できます。

$scope.pat=/^.*$/

そして、htmlで

<input ng-pattern="pat" ... >
于 2013-07-03T22:45:39.280 に答える
1

ng-pattern を使用せずに回答が必要ですが、ディレクティブを使用しても、別のファイルを使用してコードに含めるよりも多くの利点が得られないため、ディレクティブを使用しないことをお勧めします。

むしろ、定数を使用してパターンをグローバルに使用できるようにすることをお勧めします。これにより、他のフォームでも使用できるようになります。ディレクティブのように、オーバーヘッドはありません。

次のような定数を宣言できます。

app.constant('FORMATS', { "ipAdressRegex": /^your-regex-here)*$/i });

そして、コントローラーまたはサービスでこの定数を使用します。

var Controller = app.controller('Controller', ['$scope','FORMATS',
function ($scope,FORMATS) {

    $scope.ipAddressPattern = FORMATS.ipAdressRegex;
    .
    .
    .

あなたの見解では:

<input class="form-control" type="text"
       id="input_ip" name="email" data-ng-model="user.ip_add"
       data-ng-pattern="ipAddressRegex" />

さらに、ビューでのみ使用したい場合は、コントローラーでローカルスコープ変数を作成する代わりに、 $rootScopeに定数を追加できます。

だから代わりに

$scope.ipAddressPattern = FORMATS.ipAdressRegex;

config.jsで行うことができます

_.assign($rootScope, _.pick(FORMATS, 'ipAddressRegex'));

ビューは以前のままです

于 2014-07-22T10:05:30.120 に答える