离子角度 NFC 变更检测问题

问题描述 投票:0回答:1

我在将实际的 Ionic Angular 与 NFC 读取器结合使用时遇到问题。

我可以使用以下提供的示例成功读取 NFC 标签:

https://ionicframework.com/docs/native/nfc

我遇到的问题是,在读取 NFC 后,Angular ChangeDetection 被破坏并且不显示更改。当我单击一个不执行任何操作的按钮时,会显示更改。

我知道我可以手动触发 ChangeDetection,这会起作用,但随后我必须在组件中的任何地方触发 ChangeDetection,我认为不应该是这样。

有人知道我做错了什么吗?

首先我认为它可能与可观察值有关,但我尝试添加一个区间可观察值,它的工作原理与预期的一样。

模板:

<p><ion-button (click)="startNFC()">start NFC readermode</ion-button></p>
<p><ion-button (click)="startNFCListener()">start NFC listener</ion-button></p>
<p><ion-button (click)="startInterval()">start Interval</ion-button></p>
<p><ion-button (click)="doNothing()">do nothing</ion-button></p>
<p>
  {{nfcReading}}
  {{nfcTag}}
  <ion-spinner *ngIf="nfcReading"> </ion-spinner>
</p>

代码:

startNFC() {
  console.log("startNFC");
  this.nfcReading = true;
  let flags = this.nfc.FLAG_READER_NFC_A | this.nfc.FLAG_READER_NFC_V;

  this.readerModeSub = this.nfc.readerMode(flags).subscribe(
  tag => {
    console.log(JSON.stringify(tag));
    this.nfcTag = this.nfc.bytesToHexString(tag.id);
    this.nfcReading = false;
    this.readerModeSub.unsubscribe();

  },
  err => {
    console.log("Error reading tag", err);
    this.nfcReading = false;
  }
);

}

doNothing() {
// this really does nothing... it is just to demonstrate that this triggers the changedetection
}

我可以看到订阅事件在控制台中被触发,但它没有显示在 HTML 中。 单击“不执行任何操作”按钮时。显示标签。

我创建了一个新的 type=angular 空白项目并在 Google Pixel 3a 硬件上进行测试。

我上传了一个示例项目来演示我的问题。 https://github.com/autlunatic/Ionic-NFC-Android-Test/

android angular ionic-framework nfc
1个回答
0
投票

我想答案就在文档中。 您需要在 ngZone 内运行侦听器。

https://capacitorjs.com/docs/guides/angular#ngzone

 Network.addListener("networkStatusChange", (status) => {
    this.ngZone.run(() => {
      // This code will run in Angular's execution context
      this.networkStatus = status.connected ? "Online" : "Offline";
    });
  });

学分还包括:
关闭插页式广告后,角度无法检测到电容器/离子中下一页的变化

© www.soinside.com 2019 - 2024. All rights reserved.