Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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
Javascript angular2 datatable无法更新数据_Javascript_Google Maps_Angular_Typescript_Datatable - Fatal编程技术网

Javascript angular2 datatable无法更新数据

Javascript angular2 datatable无法更新数据,javascript,google-maps,angular,typescript,datatable,Javascript,Google Maps,Angular,Typescript,Datatable,在datatable呈现之后,我无法更新数据。 我使用的是angular2数据表 在my appcomponent.html中: 如果我像这样更新appcomponent.ts文件中的数据2: this.httpservice.getdata().subscribe (data=> { this.data2=data; for (i = 0; i < 21; i++) { markerarray[i] = new google.maps.Marker({

在datatable呈现之后,我无法更新数据。 我使用的是angular2数据表

在my appcomponent.html中:

如果我像这样更新appcomponent.ts文件中的数据2:

this.httpservice.getdata().subscribe
(data=>
{   this.data2=data;
    for (i = 0; i < 21; i++) {
    markerarray[i] = new google.maps.Marker({
    position: new google.maps.LatLng(this.data2[i].latituide, this.data2
    [i].longituide),          //In this line
    title: this.data2[i].name,  //and this
    map: map
    });
        }
    google.maps.event.addListener(map, 'idle', function () {

            var bounds = map.getBounds();
           for (var i = 0; i < 20; i++) {
            var marker = markerarray[i];
           if (bounds.contains(marker.getPosition()) === true) {
            this.data2.length=0;// This is not working for me
            }
            }

        });
 })
this.httpservice.getdata().subscribe
(数据=>
{this.data2=数据;
对于(i=0;i<21;i++){
markerarray[i]=新的google.maps.Marker({
位置:new google.maps.LatLng(this.data2[i].latituide,this.data2
[i] .longituide),//在此行中
标题:this.data2[i].name、//和这个
地图:地图
});
}
google.maps.event.addListener(映射'idle',函数(){
var bounds=map.getBounds();
对于(变量i=0;i<20;i++){
var marker=markerary[i];
if(bounds.contains(marker.getPosition())==true){
this.data2.length=0;//这对我不起作用
}
}
});
})

我想在标记绑定后清空datatable。

我想出了一个解决方案,尽管我不确定这是否是最好的方法

我使用ChangeDetectorRef来检测更改

  constructor(private http: Http,private httpservice: HttpService,private ref: ChangeDetectorRef) {
       ref.detach();
    setInterval(() => {
      this.ref.detectChanges();
    },1000);
    }

尝试执行此操作。data2=[]使用
箭头函数
保留
而不是
函数{
@JuliaPapsynkova我尝试了此操作。但它仍然没有更新:(@yurzui我尝试使用胖箭头函数。但表仍然没有更新。如果您对http中的所有代码进行注释,请订阅并执行此操作。data2=[],是否有效?显示u绑定到datatable。这可能会影响应用程序每秒执行检测更改的性能。此外,您需要删除OnDesctroy中的间隔-否则内存泄漏。@JuliaPassynkova哦,好的。您有其他解决方案吗?我想不出任何其他方法。我经常使用datatable,并且可以修改push changes。如果您认为更改检测有问题,请在更改数据2后尝试执行“setTimeout(()=>{window.dispatchEvent(新事件('resize'));})”。