HunteR-VRX
@HunteR-VRX
Помешанный на развитии

Каким образом вывести (интерполировать) данные из переменных в title?

Необходимо управлять title'ом каждой отдельно взятой страницы приложения на vue js. Строковые данные хочу интерполировать в него, через данные переменных.

Не могу организовать взаимодействие переменных и объекта title - страницы. Использую структуру однофайловых компонентов.

В каком хуке жизненного цикла "заводить" title:
computed, mounted, или может быть в объекте data?

Как именно должна (может быть) выглядеть запись конструкции: document.title или просто title?

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

P.S. Vue meta не предлагать.
  • Вопрос задан
  • 59 просмотров
Решения вопроса 1
Aetae
@Aetae Куратор тега Vue.js
Тлен
Ну например глобальный миксин приблизительно такого вида:
{
  beforeCreate() {
    this._oldTitle = document.title;
  },  
  unmounted() {
    if (this.PAGE_TITLE)
      document.title = this._oldTitle;
  },
  watch: {
    PAGE_TITLE: {
      handler(val, oldVal) {
        if (val)
          document.title = val;
        else
          document.title = this._oldTitle;
      },
      immediate: true
    },
  }
}

И в компоненте управляешь просто свойством this.PAGE_TITLE.
Или в случае composition api:
const PAGE_TITLE = ref('<title>'); // computed(() => ...)
// ...
return { 
  PAGE_TITLE,
  // ...
}

и в случае script setup/render:
+ expose({ PAGE_TITLE })

Особенность в том, что управление title тут заберёт последний загруженный компонент имеющий PAGE_TITLE, что может привести к багам если на одной странице таких окажется два.

У меня есть где-то самописка которая делает подобное но с учётом роутера и иерархии, и это уже, увы не так просто.:)

P.S. Вообще на таком примитивном уровне можно просто использовать document.title напрямую и не париться. Подход с миксином имеет смысл если этот title вы используете ещё где-то в приложении глобально.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы