2

リンク関数を使用して、2 つの異なるディレクティブ コントローラーをバインドするだけで、ほとんどの機能をコントローラーのコードに含めるように Angular ディレクティブを作成しようとしています。

コントローラーを「必要とする」ことと、「コントローラー」を定義することの両方に関して、問題が発生しています。リンク関数で、指定したコントローラーへの参照を取得するにはどうすればよいですか?

サンプルコード (もちろん、周囲のすべての module.directive を除く)

return {
    require:'ngModel',
    controller: 'CustomDirectiveCtrl',
    link: function(scope, element, attrs, controllers)
    {
        console.log(controllers);
    }
};

「コントローラー」には ngModelController が含まれていますが、CustomDirectiveCtrl にアクセスする方法がありません。

リンク関数から ngModelController と CustomDirectiveCtrl の両方にアクセスするにはどうすればよいですか?

4

1 に答える 1

1

誰かに説明してみるまで、問題が見つからないことがあります。

Angular JS の ngModel のソースを調べたところ、解決策が見つかりました。他の誰かが同じ理解の問題に遭遇した場合に備えて、上記のコードを修正する方法は次のとおりです。

https://github.com/angular/angular.js/blob/master/src/ng/directive/input.js#L2347

module.directive('customDirective', function(){
    return {
          require:['customDirective', 'ngModel'],
          controller: 'CustomDirectiveCtrl',
          link: function(scope, element, attrs, controllers){
               // CustomDirectiveCtrl is controllers[0],
               // NgModelController is controllers[1]
               console.log(controllers);
          }
    }
});

独自のコントローラーを取得するには、別のモデルのコントローラーを取得するのとは異なる構文が必要だと思いました。思ったより簡単です。

于 2014-07-10T20:16:42.987 に答える