繁体   English   中英

离子/角度:ngFor不更新

[英]Ionic/Angular: ngFor does not update

我正在尝试列出活动设备。 将此信息保存在实例变量screens 每当我使用setTimeOut进行更改时,它都起作用,但是,如果我在callback部分中进行更改,则它不起作用。

这是代码:

import { Component } from "@angular/core";
import { NavController } from "ionic-angular";
import { Zeroconf } from '@ionic-native/zeroconf';

@Component({
  selector: "page-home",
  templateUrl: "home.html"
})

export class HomePage {

  screens: Array<{name: any, ip: any}> = [];

  constructor(public navCtrl: NavController, private zeroconf: Zeroconf) {


    this.screens.push({
      name: "TEST",
      ip: "123"
    })

    setTimeout(() => {
      this.screens.push({
        name: "TEST2",
        ip: "Test2"
      })
    }, 1000);

    setTimeout(() => {
      this.screens.push({
        name: "TEST3",
        ip: "Test3"
      })
    }, 2000);

    setTimeout(() => {
      this.screens.push({
        name: "TEST4",
        ip: "Test4"
      })
    }, 10000);

     this.zeroconf.watch('_http._tcp.', 'local.').subscribe(result => {
      if (result.action == 'added') {
        this.screens.push({              //This is not working
          name: result.service.name,
          ip: result.service.ipv4Addresses
        });
        setTimeout(() => {
          this.screens.push({
            name: result.service.name,
            ip: result.service.ipv4Addresses
          });
        }, 1000);
      } else {
        console.log('service removed', result.service);
      }
    });

  }

}

可能是什么原因造成的?

可能您需要一个BehaviorSubject定期进行更新

在您共享服务中定义

    listOfScreens: BehaviorSubject<any[]> = new BehaviorSubject<any[]>([]);

    addScreens(newData) {
    this.listOfScreens.next(this.listOfScreens.getValue().concat([newData]));
}

在你的组件中

ngOnInit() {
  this.sharedService.listofScreens.subscribe(
    screens => this.screens = screens
  )
}

addScreens() {
  let data = {
  name: "TEST",
  ip: "123"
}
  this.sharedService.addScreens(data);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM