Angular 9 PWA с каруселью и сервис-воркером не регистрируется - PullRequest
0 голосов
/ 17 июня 2020

Привет, ребята, это немного странная ситуация,

Сначала я использую Angular 9 с Bootstrap 3.3.5 (пока не могу обновить до последней версии),

на домашней странице I есть карусель, и я также реализовал angular PWA.

Проблема в том, что если я использую PWA и карусель, Serviceworker (SW) не регистрируется. Если я закомментировал код карусели, то да. Если я прокомментировал Jquery, он будет зарегистрирован, потому что тогда карусель не работает. То же самое происходит с ngx-owl-carousel также,

У меня здесь нет никакого решения. Если вы можете дать какие-либо подсказки или решения, это будет большим подспорьем. Спасибо :) Интересная находка: когда я нажимаю на карусель, иногда сервис-воркер каким-то образом регистрируется. -_- в любом случае это мой код для карусели,

<div class="bloc bgc-white full-width-bloc l-bloc" id="bloc-2">
        <div class="container">
            <div class="row row-no-gutters">
                <div class="col-sm-12">
                    <div id="carousel-1" class="carousel no-shadows slide" data-ride="carousel">
                        <div class="carousel-inner" role="listbox">
                            <div class="item active">
                                <img [attr.src]="sliderData[0].sliderImgUrl" (click)="navigateSliderProd('product',sliderData[0])"  (load)="imageLoaded($event)"/>

                            </div>
                            <div class="item"  *ngFor="let slider of sliderData | slice:1;let i = index">
                                <img [attr.src]="slider.sliderImgUrl" (click)="navigateSliderProd('product',sliderData[i+1])" (load)="imageLoaded($event)"/>

                            </div>
                        </div>
                        <a class="left carousel-control" href="#carousel-1" role="button" data-slide="prev">
                            <span class="fa fa-chevron-left"></span><span class="sr-only">Previous</span>
                        </a>
                        <a class="right carousel-control" href="#carousel-1" role="button" data-slide="next">
                            <span class="fa fa-chevron-right"></span><span class="sr-only">Next</span>
                        </a>
                    </div>
                </div>
            </div>
        </div>
    </div>

1 Ответ

1 голос
/ 18 июня 2020

Установите ServiceWorkerModule registrationStrategy на registerImmediately (или registerWithDelay). По умолчанию регистрация ПО ожидает, пока приложение не станет стабильным (без невыполненных микрозадач или макрозадач). setTimeout, который часто встречается в каруселях, приведет к тому, что приложение никогда не будет стабильным.

ServiceWorkerModule.register('ngsw-worker.js', {
  enabled: environment.production,
  registrationStrategy: 'registerImmediately',
}),

Обратите внимание, что Angular делает это ненужным путем регистрации после 30 секунд, если все еще нестабильно.

...