2016-10-27 20 views
0

どの入力要素にも適用されると、data-ng-patternが追加されるという指令を作成しようとしています。今私はそれをバインドしたい。私は周りを見回して何かを見つけましたが、それは動作しません要素に動的に生成されたアンギュラ・ディレクティブ・テキストをバインドする

mainModule.directive("telephoneValidation", function ($compile) { 
    return { 
     restrict: "A", 
     replace: true, 
     link: 
      function (scope, element, attrs) { 
       element.attr('data-ng-pattern','^[\(]{0,1}[\+ ]{0,1}[0-9 ]+[\)]{0,1}[0-9\- ]*$/'); 
       $compile(element.contents())(scope); 
       element.removeAttr('telephone-validation').empty(); 
      } 
    }; 
}); 
+0

これでアーカイブしたいもの:$ compile(element.contents())(scope); – eg16

+0

基本的にコンパイル段階で 'ng-pattern'属性とremoveディレクティブ属性を追加する必要があります。その後、リンクから要素を再度コンパイルします。 [この回答](http://stackoverflow.com/a/31062143/2435473)をご覧ください。 –

+0

@ eg16 DOM要素を再コンパイルして要素に2ウェイバインディングを実行しようとしているので、角度が要素を監視し、それに応じて応答します。現在、カスタム属性として動作しています。 – NavalRishi

答えて

0

申し訳ありません。私は属性の値を間違って書いていました。最初はスラッシュがありませんでした。要素は同じコードで動的にコンパイルされています。

より必ずする方法は

compile(angular.element(element))(scope)); 

私は、コンパイルのドキュメントhereを読んで解決策を見つけてコンパイルする

angular.element(element) 

を使用して、それを渡すことで、角要素としての要素をラップすることです

0

代わり$compile(element)(scope)を試してみてください。 contents()を使用すると、要素自体ではなく要素の子が対象となります。https://api.jquery.com/contents/

+0

はい。 .contents()は動作しません。提案ありがとう。 – NavalRishi

関連する問題