【问题标题】:Ionic/Angular: ngFor does not update离子/角度:ngFor 不更新
【发布时间】:2018-10-17 08:41:30
【问题描述】:

我正在尝试列出活动设备。将此信息保存在实例变量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);
      }
    });

  }

}

这可能是什么原因?

【问题讨论】:

  • 你能把你的HTML代码贴在这里吗?

标签: angular ionic-framework ngfor


【解决方案1】:

您可能需要一个 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);
}

【讨论】:

  • 感谢您的回答。添加了提供者并按照您所说的进行了所有操作。现在我的问题是,当我在回调中添加内容时,数据不会再次呈现。
  • 工作示例在此链接上 [stackblitz.com/edit/…
  • 通过使用 Interval 手动更新它并将其设置为下一个值来使其正常工作。
猜你喜欢
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
  • 2018-08-09
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多