v-once
работает не так, как вы ожидаете. Он не только добавляет один элемент в dom! Вместо этого v-once
визуализирует шаблон отдельного компонента, vue документация гласит:
При последующем повторном рендеринге элемент / компонент и все его дочерние элементы будут обрабатываться как статическое содержимое и пропускаются.Это можно использовать для оптимизации производительности обновления.
Однако это не повторный рендеринг того же элемента, и это не мешает реализации вашего b-modal
, который будет добавлен к множеству dom.раз.
Возможный обходной путь, который я бы предложил, - использовать переменную в данных компонента вашего родителя, чтобы определить, был ли модальный режим открыт, и вызвать его с помощью метода на кнопке, например:
<template slot="action" slot-scope="data">
<b-btn @click="openModal" variant="primary">View</b-btn>
<b-modal :active.sync="isOpen" size="lg" title="View Surat">
<p class="my-2">View Surat</p>
</b-modal>
</template>
А в вашем компоненте:
data() {
return {
// your other data
isOpen: false
}
},
methods: {
openModal () {
this.isOpen = true
}
}
Честно говоря, я не проверял это в жизненном проекте, но, как говорится в buefy документации , это должно дать вам ожидаемоеповедение.