にコントローラとディレクティブのリンクから$タイムアウトコールバックを実行します。Angularjs:私は、カスタムディレクティブで、このシンプルなアプリを持っており、それは、コントローラの右の順
angular.module('app', [])
.directive('customDir', function($timeout){
return {
restrict: 'E',
template: 'custom dir template',
controller: 'customDirCtrl',
link: function() {
$timeout(function(){
console.log('link');
});
}
}
})
.controller('customDirCtrl', function($timeout) {
$timeout(function(){
console.log('ctrl');
}).then(function(){
});
});
ディレクティブのリンク機能とコントローラの両方がどのタイムアウトコールバックが含まれています上記の場合、ctrlの関数、linkの関数の順に実行されます。ここをクリックしてください:https://codepen.io/neptune01/pen/EoxgvV
私が必要とするのは、コントローラのタイムアウトコールバックがディレクティブのリンクからのコールバック後に実行されるようにすることです。それ、どうやったら出来るの?
を行った場合、あなたは明らかにXYの問題を抱えているリンクから放送することができます。なぜそれが必要ですか?あなたの事件を説明してください。また、これはコントローラだけで処理することもできます。現在のリンク関数は$ postLinkコントローラフックのために時代遅れです。 – estus
@estus私は、ウィンドウ内のスクロールイベントハンドラをリンク内に持っていて、内部のdivをスクロールして、垂直なサイドメニューを含み、スクロールスクロールしてメニュー項目にアクティブなクラスを追加します。私はメニューの下の項目(最後のものではない)の1つをクリックすると、常にスクロール位置のためにアクティブとしてマークされる最後の項目で終わるので、ユーザーがメニュー項目をクリックしたときにこのクラスの追加をオーバーライドしたい。クリックハンドラ関数はコントローラ内にあり、リンク内のスクロールイベントハンドラにあります。短いです:) – neptune
はい、これはXYの問題です。タイムアウト命令のような軽薄なものが必要なことは、何かが間違っていたことを示しています。本当のケースとhttp://stackoverflow.com/help/mcveで質問を再入力することをお勧めします。コントローラとリンクの関数間の分割はあまり意味がありません。スコープORコントローラのインスタンスでメソッドを定義することができます(または定義する必要があります)。言われたように、現在のところ、リンク機能は必要ありません、これはコントローラだけで扱うことができます。 – estus