私はAngularが初めてです。助けていただければ幸いです。私はさまざまな領域を持つアプリを作成しています。それをページと呼びましょう (実際には 1 ページのアプリですが)、当然さまざまなビューを使用し、本文、スタイル、スクリプトなどと共通のレイアウトを持っています。
アプリの 1 つのページのみでキーボード イベントをリッスンしたいという問題が発生しています。このページは対話型であり、他のページは管理用です。キーボード イベントを入力、ドキュメント、または本文にバインドできます。入力が適切ではなく、ドキュメントと本文がグローバルであり、アプリでキーを押すたびにリッスンしたくありません。
Angular でこの問題を解決するにはどうすればよいですか?
私のコードはここにあります: https://github.com/mgenev/geminiFc/blob/master/public/js/controllers/practice.js
jQuery をごまかし、特定のページのコントローラーの本体にイベントをバインドしましたが、Angular はイベントが発生したように反応しませんでした。
$('body').keydown(function(e) {
$scope.changeIndex(e);
});
次に、 $scope.$apply(); を使用する必要があることを読みました。これは、イベントが発生する changeIndex 関数の下部で行いました。
これは実際には機能しましたが、UI を制御する別の方法であるクリック イベントを介して changeIndex を呼び出すと、
<div class="practice-controls-bottom">
<i ng-click="changeIndex('down');" class="icon-thumbs-down icon-4x thumbs-down"></i>
<i ng-click="changeIndex('up');" class="icon-thumbs-up icon-4x thumbs-up pull-right"></i>
</div>
Angular は私にエラーを与えます:
Error: $apply already in progress
at Error (<anonymous>)
at g (http://localhost:3000/lib/angular/angular.min.js:85:37)
at Object.e.$apply (http://localhost:3000/lib/angular/angular.min.js:89:129)
at Object.$scope.changeIndex (http://localhost:3000/js/controllers/practice.js:173:20)
アドバイスお待ちしております。ありがとう!