Android NFC Change Detection Problem

I have a problem using an actual Ionic Angular in combination with NFC reader.

I can successfully read the NFC Tag with the example provided in:

The Problem that i have is, that after the reading of the NFC somehow the Angular ChangeDetection is broken and the changes are not displayed. When i click on a button that does nothing, the changes are displayed.

I know i can trigger the ChangeDetection manually, which would work, but then i would have to trigger the ChangeDetection everywhere in the component, which i think should not be the case.

Does anyone have an idea what i am doing wrong?

First i thought maybe it has something to do with the observable, but i tried adding a interval observable, which works just like expected.


<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>
  <ion-spinner *ngIf="nfcReading"> </ion-spinner>


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 => {
    this.nfcTag = this.nfc.bytesToHexString(;
    this.nfcReading = false;

  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

i get can see that the subsciption event is triggered in console, but it is not shown in the HTML.
When clicking the do nothing Button. The tag is shown.

I created a fresh type=angular blank project and test on a Google Pixel 3a hardware.

i have uploaded a sample project to demonstrate my problem.

i found a weird and bad work-around.
I thought i share it, maybe someone comes up with a better idea or with a real solution.
i subscribe to a interval(250) before reading which also does nothing other than unsubscribe when this.nfcReading is done.
this triggers the detection.

this.readingInterval = interval(250).subscribe((_) => { 
  if (!this.nfcReading) { 

have you solved it? I think I have your solution

No, I have not found a good solution.
Only the bad workaround to trigger the changedetection with the interval.