AngularJSへの移行が遅いjQueryプロジェクトがあります。実際には、AngularJSコンポーネントを1つずつ導入して、イベント・バスとして$ rootScopeを使用してjQueryハンドラに結びつけようとしています。
これは私がjQueryのからイベントを送出する方法である:
var el = $('[ng-app="cpmsApp"]')[0];
var rootScope = angular.element(el).scope().$root;
rootScope.$emit('someevent', {'value': 'TR'});
、これは私は、コントローラ内部でそれらをキャッチする方法である:
$rootScope.$on('someevent', function(event, passed_obj) {
console.log('received event');
console.log(passed_obj);
$scope.$apply(function() {
$scope.countryfilter = passed_obj.value;
});
});
これは角外からのイベントをキャッチしながら、正常に動作しますが、私はその中からイベントを出そうとします。エラーが発生します:
Error: [$rootScope:inprog] http://errors.angularjs.org/1.6.4/$rootScope/inprog?p0=%24apply
docsは、明示的な$apply
が不要であることを意味します。
私の質問は、イベントを見て、$apply
を使用するかどうかを確認する方法です。線に沿って何か:
if(event.from_within_angular) {
$scope.countryfilter = passed_obj.value;
} else {
$scope.$apply(function() {
$scope.countryfilter = passed_obj.value;
});
}