Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Angular Variable change not detecting html

I’m trying to update the variable in the output function and its’ updating in ts file only, not HTML, I’m adding code below.

TS FILE

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit, OnChanges {
  success: boolean = false;

  constructor(private _cdr: ChangeDetectorRef) {}

  ngOnInit() {
    this._cdr.detectChanges();
  }

  validatePayment(response) {
    this._cdr.detectChanges()
    this.success = true;
    console.log('updatePaymentOrder', this.success);
  }

  ngOnChanges(changes: SimpleChanges) {
    console.log("Changes detected");
    if(changes.success) {
      console.log('changes.success', changes.success.currentValue);
    }
  }
  
}

HTML CODE

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

<p>{{success}}</p>
<app-razorpay (paymentResponse)="validatePayment($event)"></app-razorpay>

razorpay.ts

declare var Razorpay: any;

@Component({
  selector: 'app-razorpay',
  template: ''
})
export class RazorpayComponent implements OnInit {
  @Output() paymentResponse = new EventEmitter<any>();
  
  constructor() { }

  ngOnInit(): void {
    this.showRazorPayWidget()
  }

  showRazorPayWidget() {
    var options = {
      key: 'KEY',
      amount: "10000",
      currency: "INR",
      name: "COMPANY",
      handler: function (response: any) {
        this.paymentResponse.emit(response);
      }.bind(this),
    };
    var rzp1 = new Razorpay(options);
    rzp1.on("payment.failed", (response: any) => {
      console.log('error')
    });
    rzp1.open();
  }

}


output:

false

expected output:

the success value should change.

success value is changing in ts file, but it’s not changing in html file….

>Solution :

I just tried to reproduce and It is not reproducible on my end. Can you add more code to it?

stackblitz playground

You can wrap this in ngZone Api

 handler: function (response: any) {
          console.log(this._ngZone.isInAngularZone)
          this._ngZone.run(() => { this.paymentResponse.emit(response); });
      }.bind(this),

Alternate way, You can add more listener to razorpay success/cancel/error like this instead of doing it from handler

    rzp1.on("payment.success", (response: any) => {
      console.log('success', response)
      this.paymentResponse.emit(response);
    });
    
    rzp1.on("payment.cancel", (response: any) => {
      console.log('cancel', response)
      this.paymentResponse.emit(response);
    });

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading