Как создать "загрузочный экран" для первого кэширования посещений SPA
Я создал одностраничное приложение, используя горячее полотенце.
Когда я начинал, у меня был этот "первый экран загрузки", когда он кэшировался. Я удалил это, но я не могу понять, как переопределить это. Я также добавил много других фреймворков, и с тех пор моя веб-страница стала намного сложнее. Я все еще использую RequireJS, Knockout и AngularJS в первую очередь.
Я не уверен, как это сделать.
Я не помню, как это было сделано изначально, и у меня возникли проблемы с поиском того, как это осуществить.
Кто-нибудь может указать мне правильное направление?
3 ответа
Может быть что-то вроде следующего
<div class="loadingScreen" ng-show="!isLoaded">
<div>Loading...</div>
</div>
<div class="container ng-hide" ng-show="isLoaded" >
Page Content
</div>
JS
angular.module('myApp').controller("itemController", function($scope, itemService){
$scope.isLoaded = false;
...Other stuff down here...
//After your ajax call that saturates your view, set $scope.isLoaded = true;
itemService.getItems().success(function(data){
$scope.isLoaded = true;
});
}
CSS
.loadingScreen{
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
background-color: white;
text-align: center;
-webkit-transform-style: preserve-3d;
}
.loadingScreen > div{
position: absolute;
top: 47%;
left: 47%;
}
Со страницы github с горячим полотенцем: https://github.com/johnpapa/HotTowel-Angular/blob/master/NuGet/HotTowel-NG/index.html
<div id="splash-page" data-ng-show="false">
<div class="page-splash">
<div class="page-splash-message">
Hot Towel Angular
</div>
<div class="progress progress-striped active page-progress-bar">
<div class="bar"></div>
</div>
</div>
</div>
с ng-show="false"
быть секретным соусом
Это простая реализация представления загрузки / всплеска с использованием angularjs. Заставка отображается по умолчанию (необработанный HTML), пока angular не завершит свой цикл инициализации. Как только приложение инициализировано, переменная области видимости appReady устанавливается, и представление заставки удаляется директивой ngIf.
<div class="body-content panel-body text-center" ng-if="!appReady">
<div class="row" >
<div class="col-sm-12">
<div class="">
<i class="fa fa-spin fa-spinner fa-5x"></i>
<h3>
App is loading
</h3>
</div>
</div>
</div>
</div>
Функция run просто устанавливает значения переменных области видимости:
var app = angular.module('app', []);
app.run(['$rootScope',initApp]);
//initializes the scope variables
function initApp($rootScope){
$rootScope.appReady = true;
$rootScope.appMessage = 'App is ready';
}
Содержимое приложения можно скрыть с помощью директивы ngCloak.
<div class="body-content" ng-cloak>
...
</div>
Посмотрите на эту статью для получения дополнительной информации:
http://www.ozkary.com/2016/03/angularjs-splash-view-to-prevent-flicker-on-init.html