コントローラとのやりとりのために命令のapiを公開するという問題が発生しました。角度:templateUrlを使用すると指示文の中でコンパイルリンクの順序が壊れます
私の構造を表す簡略化されたjsfiddleがあります。
ディレクティブの属性がtemplateUrl
である(上記のフィールドでtemplate
に置き換えられました)、テンプレート非同期のロードにつながります(this questionによる正しい動作)。
.controller('MainCtrl', function($scope, $timeout) {
$scope.api = {};
$scope.init = function() {
$timeout(function() {
$scope.api.doWork();
})
}
$scope.init()
})
私に来るのアプローチがあります:メインコントローラはそのためのディレクティブのAPI関数doWork
は(あなたは$タイムアウトのようなもので呼び出し、それをラップする場合でも)定義されていませんした後、結果ディレクティブのコントローラーが呼び出されると
指示のリンク機能で心的使用のイベントを受信し、そのイベントに$scope.api.doWork
をサブスクライブします。しかし、私はイベントを使用することに満足していません。 apiを公開する同様の方法で互いにネストされたディレクティブがある場合、そのようなケースを処理する方法も明確ではありません。 一方、templateUrl
をtemplate
と置き換えることもできますが、テンプレートの複雑なレイアウトの場合は非常に間違っています。
このように、このような問題を解決する方法はちょっと残念です。それを修正する最良の方法は何ですか?おそらく、ディレクティブのapiを公開する別のテクニックがあります(私はAndrej Kaurinの答えがthreadであることに触発されています)。