如何在Angularjs中侦听本机和自定义javascript事件
我试图在AngularJs控制器中获得一个本机javascript事件侦听器。我不想解释为什么,但我不明白如何解决这个问题 我创建了如下自定义事件:如何在Angularjs中侦听本机和自定义javascript事件,javascript,angularjs,dom,Javascript,Angularjs,Dom,我试图在AngularJs控制器中获得一个本机javascript事件侦听器。我不想解释为什么,但我不明白如何解决这个问题 我创建了如下自定义事件: var event = document.createEvent('HTMLEvents'); event.initEvent('custom-event', true, true); document.dispatchEvent(event); 在角度控制器内部: angular.module('uploadCtrl', []) .cont
var event = document.createEvent('HTMLEvents');
event.initEvent('custom-event', true, true);
document.dispatchEvent(event);
在角度控制器内部:
angular.module('uploadCtrl', [])
.controller('uploadController', ['$scope', '$window', '$compile', function($scope, $window, $compile, $http, Video) {
document.addEventListener('custom-event', function(e) {
console.log('event received');
})
}]);
我做错了什么?
谢谢请记住,在DOM准备就绪之前,不会执行控制器代码。如果没有更多的代码,很难说您的问题是什么,但我敢打赌,在控制器连接到侦听器之前,您正在触发该事件。看看这个,它是有效的
(function(window, angular) {
'use strict';
angular.module('Test', [])
.controller('UploadCtrl', ['$window', function($window) {
$window.document.addEventListener('custom-event', function(e) {
$window.console.log('event received');
});
}]);
window.setTimeout(() => {
const event = document.createEvent('HTMLEvents');
event.initEvent('custom-event', true, true);
document.dispatchEvent(event);
}, 0);
})(window, window.angular);
请注意,此代码仅用于演示目的。
setTimeout
”仅用于显示事件侦听器将处理事件,并且OP的代码正处于竞争状态。感谢您的回答,我注意到我没有在应用程序中加载控制器。谢谢,没问题。如果我的答案有帮助,请考虑把它标记为答案。