1

わかりました。AngularJS を操作するときにコントローラーで DOM 操作を行うのは悪い習慣と見なされていることはわかっています。そのためにはディレクティブと $scope を使用する必要がありますが、イベント バインディングはどうでしょうか? 見た目からすると、ngClick、ngMousedown、ngMouseenter などのすべての組み込みイベント ディレクティブを考慮すると、これも眉をひそめられます...しかし、そうであれば、方法がわからないコードがあります。 AngularJS の方法を実行します。

私が構築しているアプリケーションには無限スクロールがあり、次のコードで実装されています (現在コントローラーに存在します)。

$(document).bind('scroll', function(){
    if(!$scope.loadingIssues && $(window).scrollTop() + $(window).height() >= $('.user-feedback-list').offset().top + $('.user-feedback-list').height()) {
        $scope.loadIssues();
    }
});

これにより、ユーザーはページをスクロールでき、ページが無限スクロールを持つデータを格納している要素の一番下に到達すると、関数が起動されてさらにデータが読み込まれます。今、私は DOM 操作を行っていません。すべての関数は $scope に添付されたデータを更新するだけで、AngularJS に DOM の更新を行わせますが、このイベントは AngularJS のベスト プラクティスに対してバインドされていますか? もしそうなら、どうすればAngularJSの方法でこれを行うことができますか(ドキュメントオブジェクトにディレクティブを添付することはできないと思うので、この場合ディレクティブは機能しないと思います)?

4

1 に答える 1

1

現在、この種のイベント バインディングを行う AngularJS の方法はないと思います。不足しているすべてのイベントのネイティブ サポートを追加することは、私の知る限り進行中ですが、安定したバージョンではまだリリースされていません。

したがって、今のところ、質問で述べたように行う必要があります。

ただし、これを機能させるには、これを行う必要があると思います。

$scope.$apply(
    function() {
        $scope.loadIssues();
    }
);

これは、AngularJS の外部からイベントを処理しているためです。$apply は、AngluarJS がモデルの変更や loadIssues() 呼び出しの結果として発生する可能性のあるものについて通知されるようにします。

于 2012-11-02T17:10:50.203 に答える