VueJS Обрабатывать завершенный шаблон перед операциями - PullRequest
2 голосов
/ 17 февраля 2020

Добрый день.

У меня сейчас интересная проблема. У нас есть сторонний сервер, который предлагает переводы для stati c html контента. Мне нужно получить этот контент через Ajax и отобразить его в моих Vue компонентах.

Текущая ситуация Эти переводы извлекаются через словарную структуру данных, то есть через категорию и ключ. Мы включили плагин Vue для загрузки их в наши компоненты с помощью функции t, например:

<template>
    <section>
        <h1>{{ t('CommonHeaders', 'HomePage') }}</h1>
        <p v-html="t('Articles', 'SiteDescription')"></p>
    </section>
</template>

На данный момент эти переводы отправляются в браузер путем встраивания их в HTML, после чего наш клиентский механизм гидратации считывает их и добавляет их в хранилище Vuex. Затем функция t ищет переводы и отображает их там, где это необходимо. Эти переводы являются реактивными и принимают параметры данных для форматирования переводов.

Мы используем Vue SF C для рендеринга пользовательских потоков в стиле SPA, хотя сайт еще не является SPA.

Проблема Чтобы это работало, переводы, необходимые для страницы, должны быть перечислены в методах внутреннего контроллера в словаре. Это стало необслуживаемым, и гораздо больше данных отправляется на внешний интерфейс, чем необходимо. Кроме того, внутренняя система не имеет определенной конечной точки, когда страница создается перед ее отправкой в ​​браузер, к которому мы можем подключиться, чтобы добавить переводы к HTML, и содержимое часто заканчивается дублированием. Внутренняя система была построена с использованием Do tNet MVC 4, поэтому на данный момент у нас нет возможностей SSR.

Решение (надеюсь) Чтобы лучше поддерживать наш код, я хотел бы использовать функцию 't' из плагина для загрузки переводов с помощью вызова AJAX до того, как механизм vue отобразил шаблон, то есть с помощью beforeCreate или созданный крючок. Проблема в том, что экземпляр Vue должен знать о переводах, необходимых в шаблонах дочерних компонентов, прежде чем вызов AJAX может быть запущен, и я понятия не имею, как это сделать sh.

На примечании задержка рендеринга, как это, идет вразрез со всеми моими инстинктами, но не похоже, что у нас есть выбор на данный момент. Я планирую кэшировать на стороне клиента переводов контент ha sh на случай, если они будут обновлены, поэтому, надеюсь, вызовы ajax не потребуются очень часто, только при первой загрузке. Сайт постепенно превращается в SPA, после чего я смогу отделить FE и использовать SSR через узел. Вплоть до этого момента, хотя это лучшая идея, которую я мог придумать.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 02 марта 2020

Я думал об этом сам, так как на данный момент я просто отправляю весь кэшированный json клиенту в App Init с загрузочным экраном, на данный момент неплохо, так как переводить не так много, но в противном случае рассматривал следующий подход:

Иметь массив в модуле vuex перевода, хранить список ключей, которым нужно translate (массив).

Иметь t() pu sh ключи translate, если их еще нет в переведенные , сохраняют и возвращают либо пустую строку , либо заполнитель до тех пор, пока перевод не станет активным.

При mounted отправляет в хранилище метод fetch, чтобы выполнить вызов ajax, установить состояние перевода и очистить список translate после завершения.

Vue должен выполнить по умолчанию его поведение перерисовывается при изменении состояния VUEX и вызывает t() в теле шаблона для вызова и возврата совпадающих значений в nextTick вместо placeholder ранее возвращенного значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...