Hacker News new | ask | show | jobs
by drapper 4029 days ago
When I was using Angular I thought doing something like

  setTimeout(function() { $scope.$digest(); }, 0);
was an ugly hack and a sign of angular's leaky abstractionism showing up. Is this considered a good practice now (or always was)?

Edit: just to clarify, I'm asking because in OP this was given as a one of the way to fix Angular speed issues.

3 comments

That's a sign someone has fundamentally misunderstood Angular and is hacking around their misunderstanding.
Why do you say that? What about it makes it fundamentally misunderstanding?
You should never have to use $scope.digest() unless you're testing a directive. You should never have to fire a digest loop manually.
It's the same thing as using $timeout; It runs a digest at the end after a setTimeout. I wouldn't call it a good practice, but it wouldn't bother me either if I saw it in a codebase. You are also welcome to use things like $evalAsync.
It's not the same thing, as the author points out since using `$timeout` in the example without an isolate scope was the source of the original problem. Instead he's suggesting you use $timeout without it's default behaviour (something that's possible now through the false argument or by calling setTimeout directly).

This is absolutely a leaky abstraction, and whether or not it's necessary sometimes when using Angular, it should still bother you.

No.