2016-11-08 15 views
0

Angular 1.5.xで私の最初のプロジェクトを構築し始めました。ここまでは順調ですね。Angular JSがスクロールイベントを発生しない

しかし、私は最近スクロールで非常に単純なものを行い、ウィンドウの位置/イベントを記録しようとしています。私は、ディレクティブ、バインディングイベント、jqueryなどのさまざまなアプローチを試みましたが、コンソールには何も記録されていないようです。

一般的に、生のjavascriptに私はそのような単純なものにします:私は私のコントローラでこのような何かを見て、コードを更新しようとした

window.onscroll = function (e) { 
    console.log(e); 
} 

angular.element($window).on('scroll', function (e) { 
    console.log(e); 
}); 

それは何もしません。イベントをクリックまたはサイズ変更すると応答します。しかしスクロールは何もしません。本当にイライラしています。

ディレクティブを使用しようとしましたが、同じ結果が出ました。何もない。

Angularがスクロールイベントを削除したり、それをやや上書きしているようです。明らかな解決策があることを望んでいます。あるいは、私がやる必要のある別の属性やアプローチが必要です。

私の質問に時間をかけてくれてありがとうございます。

本当に助けてもらえれば助かります。

+0

あなたは.bind'代わり.on' 'の'使用してみましたか? – Lifehack

+0

はい私は持っています。何もしていないようです。 –

+0

イベントを「クリック」などのものに変更した場合。できます。 「スクロール」はまったく反応しないようです。本当に変だ。 –

答えて

1

ここをクリックしてくださいhttp://plnkr.co/edit/FL06BgnmOpgVXNecB3mB?p=preview HTMLページをスクロールしてコンソールを開くと、いくつかの出力が表示されます。 $ windowは依存関係注入であることに注意してください。

app.directive("scroll", function ($window) { 
    return function(scope, element, attrs) { 
    angular.element($window).bind("scroll", function(e) { 
     console.log(e); 
     console.log(this.pageYOffset); 
     scope.$apply(); 
    }); 
    }; 
}); 
+0

こんにちは@ジー、私を助けてくれてありがとう。私はプランナーであなたの例を試してみました。しかし、私はそれを私のアプリに転送すると、スクロールイベントをトリガーしません。自分のコードに矛盾するものがあるとしか思えません。しかし、私は何がわからない。私はそれが "クリック"に "スクロール"を切り替えると、そのイベントを発生させるが、スクロールしないことは奇妙なことに気付く。 –

+0

。私はついにそれに反応するようになった。私は要素にハードコードされたCSSの高さの値を5000pxとし、イベントを記録しています。だから、角度がウィンドウの高さを得ていないように見えます。私はそれが動的テンプレート/ルートを使用することとは何かを推測しているし、ページの高さがある前にスクロールイベントをバインドしていますか?私はこれがバグか典型的な角度であるのだろうか? –

+1

ああ、私はとてもばかげている。私は私のCSSで100%の身長のタグを持っていた。だから私は私のJSがスクロールする必要はないと思うと仮定しています。うまくいけば、これは似たような問題が発生した場合、他の人に役立ちます。もう一度お世話になりました。 –

0

あなたがコントローラで使用したい場合は、このようなことが可能です:

Plnkr example

app = angular.module('app', []) 
    .controller('scrollCtrl', function($scope, $document, $window) { 
    ctrl = this; 
    ctrl.pos = 0; 

    //Scroll function 
    ctrl.onScroll = function() { 
    $scope.$apply(function(){ 
     ctrl.pos = $window.scrollY; 
    }); 
    } 

    //Bind current this to function 
    ctrl.onScroll = ctrl.onScroll.bind(ctrl); 

    //Event 
    $document.on('scroll', ctrl.onScroll); 

    //Easy to unsubscribe from event: 
    $scope.on('destroy', function() { 
    $document.off('scroll', ctrl.onScroll); 
    }); 
}) 
関連する問題