Hi,
You cannot use the VM's public IP in your ng serve because it [the Public IP] isn't known inside of the VM. This is normal and expected. Instead, you can use 0.0.0.0, similar to below:
ng serve --host 0.0.0.0
Additionally, in order for your app to be reachable via public Internet you need to A) make sure incoming port 4200 is allowed in the VM's firewall and B) make sure you've allowed port 4200 incoming in your NSG (it appears you have already done this)
Please click Accept Answer and upvote if the above was helpful.
Thanks.
-TP