Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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
Angular2 Web Worker-视图未更新_Angular_Typescript_Web Worker - Fatal编程技术网

Angular2 Web 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()对象以生成大量随机数。我在消息上侦听在生成单个随机数后触发的
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之后;观察