2017-09-09 11 views
0

角度コントローラー内にいくつかの追加機能を備えたテキスト入力を表す指示があります。最大長がディレクティブに渡されるので、入力された入力テキストは、その解析値に基づいてディレクティブ内で制限できます。 最大の長さは、ユーザの活動に基づいて時々変化するコントローラ変数を使用して決定されます。ディレクティブがコントローラー内のディレクティブ属性値の変更指示を再レンダリングします。

<text-box-directive data-max-length="{{maxLength}}"></<text-box-directive> 

maxLengthの変数は、変数の変更は、指令値に更新されないにもかかわらず、属性として使用されるので、このディレクティブ

angular.module('common.directives') 
    .directive('textBoxDirective', function ($parse) { 

    return { 
     scope: { 
      // some additional scope variables 
     }, 

     link: function (scope.element, attrs) { 
      scope.maxLength = $parse(attrs.maxLength)(); 
     } 
    } 
} 

で以下に示します。その指示。私は時にコントローラの値の変化は、この値を更新することにしたいが、それでもmaxLengthの変数がディレクティブに属性であることが要求されるすべての

+0

あなたがここで何を求めているかは本当に明確ではありません。 Angularは動的再レンダリングを使用します。すでに** $ダイジェストサイクル中にすべてを再レンダリングします。あなたが '$ digest'の影響を受けるべきものがあれば、コード**を表示するべきです。 [mcve]がなければ、他人が提供できる唯一のものは盲目的な推測です。 – Claies

+0

質問を更新しました:) –

+0

なぜここで '$ parse'を使用していますか?あなたのHTMLに単一の中括弧( '{}')しか使わないのはなぜですか?単にプロパティを渡し、 'scope'で普通の双方向バインディングを使用します..... – Claies

答えて

0

まず、あなたのコードで$parseを使用する必要はありません。補間値を受け取っているはずです。

ここで、コントローラがコントローラ$scopeにあり、それをディレクティブに渡したいとします。このことを念頭に置いて、あなたは

<text-box-directive max-text-length="{{maxLength}}"></<text-box-directive> 

今すぐあなたの鋳型に以下のようなディレクティブを使用しディレクティブリンク機能の内部で、あなたも取得するコード -

link: function (scope, element, attrs) { 
    attrs.$observe('maxTextLength', function (newValue) { 
    scope.maxLength = newValue; 
    }); 
} 

以下この方法であなたを使用して属性値を取得しますコントローラ$scopeで値が変更されるたびに通知されます。

+0

詳細については、https://docs.angularjs.org/api/ng/service/$compile#attributesを参照してください。 –

関連する問題