One of the problems that you're facing is that the browser will display the <body>
element before AngularJS has loaded and started manipulating the DOM. What other people said about ng-class
is correct, it will do the right class applying but you still need to not show anything before Angular is ready.
In previous versions of Angular you could do this:
<body style="display:none" ng-show="true" ng-class="{{bodyClass}}">
In recent versions this doesn't work however because ng-show
does its visibility by adding and removing the ng-hide
class (which is less specific than an element attribute)
What I've been doing recently is this:
<head>
...
<style> <!-- Or you could include this in an existing style sheet -->
.ng-cloak {
display: none !important;
}
</style>
</head>
<body class="ng-cloak" ng-cloak ng-class="{{bodyClass}}">
Doing it this way means that the <body>
will be immediately hidden by the style for the ng-cloak
class. When Angular does start up it will process all of the directives include ng-class
and ng-cloak
, so your <body>
element will then have the right class and be visible.
Read more here ng-cloak directive