他のディレクティブを含むカスタム ディレクティブを作成するときは、preLink を使用する必要がありました。私の場合、ディレクティブには、Angular UI Bootstrap の Typeahead ディレクティブをその要素の一部に適用し、独自のスコープ変数を使用して Typeahead 機能を初期化するテンプレートが含まれていました。
例えば:
...
template:
"<select ng-show='dropdown' class='form-control' ng-model='ngModel' ng-options='s for s in suggestions'></select>"
+ "<textarea ng-show='!dropdown' class='form-control' ng-model='ngModel' typeahead='s for s in suggestions |filter:$viewValue' typeahead-min-length='0' typeahead-editable='{{editable}}'></textarea>",
...
その場合、Angular は親ディレクティブの前に子ディレクティブをリンクするため、preLink を使用して先行入力をセットアップする必要がありました。ディレクティブの postLink 関数で $scope.dropdown 変数と $scope.editable 変数を初期化したところ、先行入力ディレクティブがリンクされたときにそれらが初期化されていないことがわかりました。このディレクティブを正しく機能させるには、それらの初期化を preLink に移動する必要がありました。