I couldn't get any of these methods to work, so I eventually did the following. For the element you want initially hidden:
<div <!--...--> style="display: none;" ng-style="style">
Then in your controller, add this at or near the top:
$scope.style = { display: 'block' };
This way, the element is initially hidden, and only shows when the controller code has actually run.
You can tune the placement to your needs, perhaps adding some logic. In my case, I switch to a login path if not currently logged in, and didn't want my interface flickering beforehand, so I set $scope.style
after the logged-in check.