Как условно отключить клиентскую сторону - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть приложение для рендеринга на стороне сервера (с переходом), и у меня есть страница 404, которую я вставил в ленивый модуль (поэтому я не увеличиваю размер загруженного Javascript).

Этоработает нормально, но при работе на стороне клиента наблюдается некоторое мерцание, которое, я думаю, связано с загрузкой фрагмента JS после завершения загрузки основного блока.

Учитывая, что эта страница содержит только статические ссылки и одну routerLink клиентская сторона вообще не нужна, и мне интересно, есть ли способ отключить клиентскую сторону на определенных URL-адресах

Редактировать: , как предложено в комментариях, которые я попытался условнозагрузите приложение.Я не могу использовать URL-адрес в качестве условия, потому что сервер отвечает 404 на несуществующий URL-адрес (на данный момент перенаправление отсутствует).Поэтому наиболее подходящим для использования является TransferState, который я успешно настроил на стороне сервера, и он генерирует некоторый вывод непосредственно перед закрывающим тегом body.

К сожалению, я не нашел способа правильносоздать экземпляр TransferState в main.ts, потому что он должен быть импортирован с помощью BrowserTransferStateModule, и я не вижу возможности импортировать модуль Angular в файл main.ts.

Я попытался создать экземпляр непосредственно с помощьюinitTransferState функция, но кажется, что она не предназначена для использования вне модуля, так как я получаю сообщение об ошибке:

ERROR in ./src/main.ts
Module not found: Error: Can't resolve '@angular/platform-browser/src/browser/transfer_state' in 'G:\Documents\Projets\Myapp\Sources\master\frontend\src'

Любая идея, кроме грязной десериализации?

1 Ответ

0 голосов
/ 19 ноября 2018

Я думаю, это то, что вы ищете:

import { Injectable, Inject, PLATFORM_ID } from '@angular/core';
import { isPlatformBrowser } from '@angular/common';

export class MyComponent implements OnInit{
    constructor(@Inject(PLATFORM_ID) private platform: any) { }

    ngOnInit() {
        if (isPlatformBrowser(this.platform)) {
            // use clientside stuff
        }
    }
}
...