AngularJS-オーバーライドディレクティブのコンパイル関数はリンク関数を呼び出しませんか?

TonyTakeshi

ディレクティブのコンパイルをオーバーライドしてディレクティブテンプレートをカスタマイズしましたが、コンパイル関数を実行した後、リンク関数を呼び出しません。

angular.module('app').directive('ngValidate', ['$compile', function($compile){
  return {
    restrict: 'A',
    require: '?ngModel',
    compile:function($element, $attrs, linker){
        // this run
        console.log('compile>>>');

        // append error message
        $element.append('<div></div>');
        $element.bind('blur',function(){
            console.log('onblur');
        });

        $compile($element.contents());
    },
    controller: function($scope, $element, $attrs){
        // this run
        console.log('controller>>>');
    },
    link: function($scope, $element, $attrs, ctrl) {
        // this doesn't run
        console.log('link>>>');
    }
  }
}]);

コンパイル後にリンクを実行する必要がある理由スコープにアクセスしたいのですが、コンパイルからスコープにアクセスできますか?

ショーンフサイン

コメントに記載されているように、コンパイル関数がある場合は、ディレクティブ定義オブジェクトで個別に定義するのではなく、リンク関数を返す必要があります。

angular.module('app', []).directive('ngValidate', ['$compile', function($compile){
  return {
    restrict: 'E',
    require: '?ngModel',
    compile:function($element, $attrs, linker){
        // this run
        console.log('compile>>>');

        // append error message
        $element.append('<div></div>');
        $element.bind('blur',function(){
            console.log('onblur');
        });

        $compile($element.contents());
        return function($scope, $element, $attrs, ctrl) {
          // this doesn't run
          console.log('link>>>');
        }
    },
    controller: function($scope, $element, $attrs){
        // this run
        console.log('controller>>>');
    }
  }
}]);

http://jsfiddle.net/uGk4f/

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

AngularJs:子モジュールのディレクティブでリンクされた関数を呼び出すことができませんか?

分類Dev

AngularJSコントローラー-ディレクティブ->ディレクティブからのコントローラー関数の呼び出し

分類Dev

親から子へのAngularJS呼び出しディレクティブコントローラー関数

分類Dev

AngularJS:ディレクティブからコントローラー関数を呼び出す

分類Dev

コントローラからangularjsディレクティブ関数を呼び出す

分類Dev

コントローラangularjsからディレクティブ関数を呼び出す

分類Dev

AngularJSディレクティブ内のトランスクルージョンされた要素をクリックして関数を呼び出す

分類Dev

Angularjsディレクティブ呼び出しコントローラー関数

分類Dev

AngularJS-外部コントローラーでディレクティブ関数を呼び出す

分類Dev

AngularJS-外部コントローラーでディレクティブ関数を呼び出す

分類Dev

コントローラangularjs内でカスタムディレクティブ関数を呼び出す

分類Dev

AngularJS-ディレクティブを使用してコールバック関数を呼び出しますか?

分類Dev

リンカ関数のスコープはangularjsディレクティブで何を表しますか

分類Dev

AngularJSの分離されたスコープ/ディレクティブからブロードキャストを受信してコントローラー関数を呼び出しますか?

分類Dev

AngularJSの分離されたスコープ/ディレクティブからブロードキャストを受信してコントローラー関数を呼び出しますか?

分類Dev

AngularJSで分離されたスコープのないディレクティブからコントローラー関数を呼び出す

分類Dev

AngularJSのディレクティブコールバック関数からモデルを変更しても効果はありません

分類Dev

AngularJSディレクティブスコープ関数が呼び出されていません

分類Dev

AngularJSはディレクティブから関数の同期呼び出しを設定します

分類Dev

AngularJSディレクティブコールバック関数のタイミングの問題

分類Dev

Angularjsのカスタムディレクティブのコントローラーのng-init関数呼び出しからテンプレートを取得する必要があります

分類Dev

親ディレクティブのangularjs関数がトランスクルージョンされたhtmlから呼び出されない

分類Dev

RequireJSをロードしたAngularJSディレクティブをコンパイルできません

分類Dev

Angularjs +ディレクティブコードを呼び出せません

分類Dev

ディレクティブから呼び出されたコントローラーの関数内の空の配列-AngularJS

分類Dev

スコープディレクティブをangularjsのオプションのアンパサンドバインディングで分離しますか?

分類Dev

AngularJs : 'this' にバインドされたコントローラー関数を外部から呼び出します (例: ブラウザー コンソール)

分類Dev

コントローラーでangularJsディレクティブからトリガーする関数を取得できません

分類Dev

ディレクティブリンク関数angularjsからの双方向データバインディングが機能しない

Related 関連記事

  1. 1

    AngularJs:子モジュールのディレクティブでリンクされた関数を呼び出すことができませんか?

  2. 2

    AngularJSコントローラー-ディレクティブ->ディレクティブからのコントローラー関数の呼び出し

  3. 3

    親から子へのAngularJS呼び出しディレクティブコントローラー関数

  4. 4

    AngularJS:ディレクティブからコントローラー関数を呼び出す

  5. 5

    コントローラからangularjsディレクティブ関数を呼び出す

  6. 6

    コントローラangularjsからディレクティブ関数を呼び出す

  7. 7

    AngularJSディレクティブ内のトランスクルージョンされた要素をクリックして関数を呼び出す

  8. 8

    Angularjsディレクティブ呼び出しコントローラー関数

  9. 9

    AngularJS-外部コントローラーでディレクティブ関数を呼び出す

  10. 10

    AngularJS-外部コントローラーでディレクティブ関数を呼び出す

  11. 11

    コントローラangularjs内でカスタムディレクティブ関数を呼び出す

  12. 12

    AngularJS-ディレクティブを使用してコールバック関数を呼び出しますか?

  13. 13

    リンカ関数のスコープはangularjsディレクティブで何を表しますか

  14. 14

    AngularJSの分離されたスコープ/ディレクティブからブロードキャストを受信してコントローラー関数を呼び出しますか?

  15. 15

    AngularJSの分離されたスコープ/ディレクティブからブロードキャストを受信してコントローラー関数を呼び出しますか?

  16. 16

    AngularJSで分離されたスコープのないディレクティブからコントローラー関数を呼び出す

  17. 17

    AngularJSのディレクティブコールバック関数からモデルを変更しても効果はありません

  18. 18

    AngularJSディレクティブスコープ関数が呼び出されていません

  19. 19

    AngularJSはディレクティブから関数の同期呼び出しを設定します

  20. 20

    AngularJSディレクティブコールバック関数のタイミングの問題

  21. 21

    Angularjsのカスタムディレクティブのコントローラーのng-init関数呼び出しからテンプレートを取得する必要があります

  22. 22

    親ディレクティブのangularjs関数がトランスクルージョンされたhtmlから呼び出されない

  23. 23

    RequireJSをロードしたAngularJSディレクティブをコンパイルできません

  24. 24

    Angularjs +ディレクティブコードを呼び出せません

  25. 25

    ディレクティブから呼び出されたコントローラーの関数内の空の配列-AngularJS

  26. 26

    スコープディレクティブをangularjsのオプションのアンパサンドバインディングで分離しますか?

  27. 27

    AngularJs : 'this' にバインドされたコントローラー関数を外部から呼び出します (例: ブラウザー コンソール)

  28. 28

    コントローラーでangularJsディレクティブからトリガーする関数を取得できません

  29. 29

    ディレクティブリンク関数angularjsからの双方向データバインディングが機能しない

ホットタグ

アーカイブ