Angular2 Web Worker-视图未更新
我创建了一个组件,该组件实现Worker()对象以生成大量随机数。我在消息上侦听在生成单个随机数后触发的Angular2 Web Worker-视图未更新,angular,typescript,web-worker,Angular,Typescript,Web Worker,我创建了一个组件,该组件实现Worker()对象以生成大量随机数。我在消息上侦听在生成单个随机数后触发的Worker()事件Onmessage事件处理程序更改组件模型(在控制台中签入),但视图不会更新 尝试了NgZone,ChangeDetectionRef,但运气不佳。我会很感激你的帮助,因为我已经被困在这里好几天了 import { Component, OnInit, OnChanges, NgZone, Input,ChangeDetectorRef }from '@angular/co
Worker()事件Onmessage
事件处理程序更改组件模型(在控制台中签入),但视图不会更新
尝试了NgZone
,ChangeDetectionRef
,但运气不佳。我会很感激你的帮助,因为我已经被困在这里好几天了
import { Component, OnInit, OnChanges, NgZone, Input,ChangeDetectorRef }from '@angular/core';
@Component({
selector: 'my-app',
template: `<h1>Counter :{{counter}}</h1>`,
})
export class AppComponent implements OnInit{
private counter: number = 0;
constructor(private cd: ChangeDetectorRef){}
private _webWorker: Worker;
ngOnInit(){
var blobURL = URL.createObjectURL(new Blob([
"onmessage = function (val) { for (var x = 0; x < val.data; x++) { postMessage( Math.random() ) } };"
], { type: 'application/javascript' }));
this._webWorker = new Worker(blobURL);
this._webWorker.addEventListener('message', (val) => {
console.log("Returned form webworker..." + val.data);
this.counter = val.data;
this.cd.markForCheck(); //also not working with NgZone.run()
});
this._webWorker.postMessage(100);
}
}
import{Component,OnInit,OnChanges,NgZone,Input,ChangeDetectorRef}来自“@angular/core”;
@组成部分({
选择器:“我的应用程序”,
模板:`Counter:{{Counter}}`,
})
导出类AppComponent实现OnInit{
专用计数器:编号=0;
构造函数(私有cd:ChangeDetectorRef){}
私人网络工作者:工作者;
ngOnInit(){
var blobURL=URL.createObjectURL(新Blob([
“onmessage=function(val){for(var x=0;x{
log(“返回表单webworker…”+val.data);
this.counter=val.data;
this.cd.markForCheck();//也不能使用NgZone.run()
});
这是._webWorker.postMessage(100);
}
}
似乎效果不错。选中这个@yurzi-它只显示最后生成的数字,中间没有任何内容。您是否尝试过在postMessage中使用delay?这里没有变化的问题detection@yurzi-是的,我有。没有变化。是否对生成的每个数字进行更改检测?对我来说,情况并非如此。在plunker中也一样,只显示最后一个数字,同时没有变化检测。将调试器放在this.counter=val.data之后;观察