У меня есть плагин nuxt / vue, основной функцией которого является динамическое определение точек останова или ширины окна.
import Vue from 'vue';
const breakpoint = {
install: (Vue, { breakpoints }) => {
Vue.prototype.$bp = Vue.observable({
windowWidth: 0,
isMobile: false,
isTablet: false,
isDesktop: false,
})
const updateOnResize = () => {
Vue.prototype.$bp.windowWidth = window.innerWidth;
Vue.prototype.$bp.isMobile = window.innerWidth < breakpoints.mobile;
Vue.prototype.$bp.isTablet = window.innerWidth >= breakpoints.mobile && window.innerWidth < breakpoints.tablet;
Vue.prototype.$bp.isDesktop = window.innerWidth >= breakpoints.tablet;
}
updateOnResize();
window.addEventListener('resize', updateOnResize);
window.addEventListener('orientationchange', updateOnResize);
},
};
Vue.use(breakpoint, {
breakpoints: {
mobile: 768,
tablet: 1024,
},
});
В моем nuxt.config
я только запускаю этот плагин на клиенте
{ mode: 'client', src: '~/plugins/breakpoint.js'}
.
Внутри моих шаблонов, где я ссылаюсь на $bp
переменная, компоненты заключены в тег nuxt <no-ssr>
.
например.
<no-ssr>
<vue-modal
:pivot-y="$bp.windowWidth < 992 ? 1 : 0.5"
:transition="$bp.windowWidth < 992 ? 'fadeUp' : 'fade'"
</vue-modal>
</no-ssr>
Когда я делаю жесткое обновление (ssr) на странице с этим модалом, он ломается, потому что говорит, что $bp
- это undefined
.Мои вопросы:
Что делает <no-ssr>
?
Насколько я понимаю, код внутри этого тега будет игнорироваться на стороне ssr, но я, очевидно, ошибаюсь.
Читает ли он часть шаблона на сервере, но просто не отображается?
Как я могу получить доступ к плагину на стороне клиента в моем шаблоне во время рендеринга на стороне сервера?
Заранее спасибо!