I'm not sure if it's better. There a couple of other ways I can think of.
Using NgZone
You can inject NgZone and execute the run method with a callback:
NgZone.run(()=>this.currentUser.next(user));
Using setTimeout
setTimeout will trigger change detection automatically:
setTimeout(()=>this.currentUser.next(user));