Подключаю usocial.pro (поделиться в соц сетях) в проекте nuxjs
Пытаюсь подключить usocial.pro (поделиться в соц сетях) nuxt.js+vue.js, элемент появляется только тогда, когда первый раз заходишь на страницу. Если переходить на это страницу по внутреннему роуту, то элемент не появляется.
Код следующий:
на динамическу страницу добавил строку(pid заменен):
<client-only><div class="uSocial-Share" data-pid="XXXXXXXXXXXXXXXXXXXXXXXXXXXX" data-type="share" data-options="round-rect,style1,default,right,bg,slide-up,size32,eachCounter0,counter0,upArrow-right" data-social="twi,vk,lj,telegram,fb,ok,mail,lin,pinterest" data-mobile="vi,wa"></div></client-only>
в скрипт добавил
script: [
{ src: 'https://usocial.pro/usocial/usocial.js?v=6.1.4', async: true}
]
Не пойму в какую сторону рыть.
Ответы (1 шт):
У uSocial не проработано взаимодействие с SPA/SSR фреймворками.
Можно попробовать вручную вызывать метод init() у их класса.
Быстро проверил на чистом nuxt.js приложении в режиме universal, работает.
Код компонента:
// @/components/usocial-bar.vue
<template>
<div
class="uSocial-Share"
data-lang="en"
data-pid="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
data-type="share"
data-options="round-rect,style1,default,absolute,horizontal,size48,eachCounter0,counter0"
data-social="fb,twi,telegram,spoiler"
data-mobile="vi,wa"
/>
</template>
<script>
export default {
computed: {
inited () {
// проверяем, есть ли уже внутри кнопки
return !!this.$el.children.length
}
},
mounted () {
this.init()
},
methods: {
init () {
// проверяем ssr
if (process.server) {
return
}
try {
if (!this.inited) {
// ручная инициализация панели
window.uSocialShare.init()
}
} catch (e) {
// этот код может сработать до инициализации главной библиотеки
// поэтому метод замотан в конструкцию try/catch
// если этот код не сработает, то сработает нативный вызов из главной библиотеки
}
}
}
}
</script>
Код страницы:
// @/pages/index.vue
<template>
<div class="your-page">
<usocial-bar></usocial-bar>
</div>
</template>
<script>
import usocialBar from '@/components/usocial-bar'
export default {
components: {
usocialBar
}
}
</script>
А подключение библиотеки советую переместить в nuxt.config.js для того, чтобы каждый раз при mounted компонента не загружать ее заново.
// nuxt.config.js
export default {
head: {
script: [
{ src: 'https://usocial.pro/usocial/usocial.js?v=6.1.4', async: true }
]
}
}