Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Angularjs中侦听本机和自定义javascript事件_Javascript_Angularjs_Dom - Fatal编程技术网

如何在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

我试图在AngularJs控制器中获得一个本机javascript事件侦听器。我不想解释为什么,但我不明白如何解决这个问题

我创建了如下自定义事件:

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的代码正处于竞争状态。

感谢您的回答,我注意到我没有在应用程序中加载控制器。谢谢,没问题。如果我的答案有帮助,请考虑把它标记为答案。