Angularjs 角度和角度通用
我正在尝试在Angular 2组件中收听随postMessage一起发送的Angularjs 角度和角度通用,angularjs,asp.net-core,angular-universal,Angularjs,Asp.net Core,Angular Universal,我正在尝试在Angular 2组件中收听随postMessage一起发送的MessageEvent 我的第一次尝试就是: window.addEventListener("message", this.handlePostMessage.bind(this)); 然后在Ngondestory中: window.removeEventListener("message", this.handlePostMessage.bind(this)); 然而,这并没有像预期的那样起作用。如果我导航到另一
MessageEvent
我的第一次尝试就是:
window.addEventListener("message", this.handlePostMessage.bind(this));
然后在Ngondestory中:
window.removeEventListener("message", this.handlePostMessage.bind(this));
然而,这并没有像预期的那样起作用。如果我导航到另一条路线并返回,则会注册两个事件侦听器
因此,我一直在尝试用来装饰该方法,但在使用预渲染(Angular Universal with.NET Core使用)时,我无法实现这一点
这使我在页面加载时出现以下错误:
Exception: Call to Node module failed with error: Prerendering failed because of error: ReferenceError: MessageEvent is not defined
有解决办法吗 您收到此错误是因为未定义MessageEvent。必须导入定义此项的任何文件 我的@HostListeners如下所示:
@HostListener("window:savePDF", ["$event"]) savePDF(event) {
this.savePDFButtonPushed();
}
您可以在此处阅读更多关于它们的信息:
然而,我目前遇到的问题与您相同——如果我导航到另一条路线并返回,我现在会收到两个事件。这就是使用@HostListener.:-(不过我已经有一段时间没有升级Angular了(目前使用的是4.4.6),所以他们可能已经在该版本之后修复了它
**编辑:刚升级到Angular 5.1.0。HostListener的“重复事件”问题仍然存在:-(
编辑#2:我也尝试过使用window.addEventListener,就像您尝试过的那样,但也有同样的问题,尽管在Ngondestory()中使用了window.removeEventListener
这让我更深入地挖掘,在那里我发现了一些我添加的代码,用于侦听来自子iFrame的消息。您的代码中是否有类似的内容
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
// Listen to messages from child window ("unsign" and "savePDF") and pass those along as events to Angular can pick them up in its context
eventer(messageEvent,function(e) {
window.dispatchEvent( new Event( e.data ) );
},false);
这已经在我的页面的构造函数中。我对它进行了保护,因此它只在页面第一次成为构造函数时执行,现在一切正常。刚刚更新了我的答案。请参阅编辑#2以查看它是否对您有帮助!
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
// Listen to messages from child window ("unsign" and "savePDF") and pass those along as events to Angular can pick them up in its context
eventer(messageEvent,function(e) {
window.dispatchEvent( new Event( e.data ) );
},false);