Ответ 1
При рендеринге на стороне сервера страница будет отображаться дважды: на сервере, поэтому вы можете увидеть рендерное представление очень рано, а затем на клиенте - после загрузки приложения.
- На стороне сервера вы используете angular -universal для отображения любого вида вашего приложения с указанием URL-адреса маршрута;
- На клиенте ваше приложение загружается как обычно - визуализируемое клиентом представление помещается в корневой тег приложения, а заменяет визуализированный сервер. Единственная магия, которая происходит на стороне клиента, заключается в переносе состояния на клиентское приложение с помощью preboot.js модуля универсального проекта, который выполняется путем записи событий, инициированных на рендеринг сервера, а затем повторное воспроизведение их на визуализированном клиенте представлении после загрузки приложения. Итак, если вы введете что-то в поле
input
до того, как приложение будет загружено, нажатия клавиш будут воспроизведены командойpreboot.complete()
после того, как визуализированное представление клиента заменяет обработанную сервером.
Ваши вопросы:
Что будет делать Angular после загрузки сценариев?
Ваше приложение загружается нормально, содержимое тега <my-app></my-app>
заменяется визуализированным клиентом представлением.
Могу ли я скопировать outerHTML и сделать эту "предварительную страницу"?
Да. Однако предпочтительнее использовать модуль angular-universal
, поэтому вы можете динамически отображать представление позади любого из ваших маршрутов.
Что касается образца, вот Angular 2 Universal Starter, который является образцовым приложением, которое демонстрирует универсальную вещь в действии, Играйте с ним:
- измените строку
'This was rendered from the server!'
вdist/server/index.js
, чтобы увидеть, что она вернулась назад, когда приложение загружено. Это означает, что оператор становится ложью после визуализации представления клиента. -
включить
preboot
и отложитьpreboot.complete()
, чтобы увидеть его в действии (введите что-то в полеinput
):SRC/main.node.ts
let config: ExpressEngineConfig = { // ... preboot: { appRoot: 'app' } // your top level app component selector };
SRC/client.ts
ngApp() .then(function() { setTimeout(function() { preboot.complete(); }, 5000); });
Вот простой DEMO статически поданный "предварительно визуализированный" вид с предварительной загрузкой на клиенте. Задержка в 5 секунд до того, как app
загрузится, чтобы увидеть предзагрузку в действии.
Я не эксперт angular2, поэтому, пожалуйста, исправьте меня, если я ошибаюсь. Я основываю свое мнение на чтении следующих ресурсов: