Вместо помещения данных для каждого экземпляра таблицы калькуляции в ваш компонент, сделайте компонент независимым от данных и поместите данные в родительский экземпляр Vue, который вызывает компонент.
например. измените объявление компонента следующим образом:
Vue.component('pb-wp', {
template:'#package',
props: {
package: {
type: Object,
default: null,
}
}
});
Тогда у вас есть пакет, который может выглядеть примерно так:
<script type="text/x-template" id="package">
<div v-if="package">
<h1>{{ package.name }}</h1>
<div>
Price: {{ package.priceNew }}
<span style="text-decoration: line-through">{{ package.priceOld }}
</div>
</div>
</script>
Пример Vue, как это, с данными
new Vue({
el: '#pricing',
data: function() {
return {
package1: [
{
id: '4',
name: 'Some title 1',
priceNew: 249,
priceOld: 399
},
{
id: '5',
name: 'Some title 2',
priceNew: 249,
priceOld: 399
}
],
package2: [
{
id: '3',
name: 'Some New title 1',
priceNew: 249,
priceOld: 399
},
{
id: '2',
name: 'Some New title 2',
priceNew: 249,
priceOld: 399
}
],
}
}
});
А затем в HTML вы можете использовать компоненты с данными
<div id="pricing">
<h2>All Packages from 'package1'</h2>
<div v-for="package, index in package1" :key="package.id + index">
<pb-wp :package="package"></pb-wp>
</div>
<h2>All Packages from 'package2'</h2>
<div v-for="package, index in package2" :key="package.id + index">
<pb-wp :package="package"></pb-wp>
</div>
</div>
Надеюсь, это поможет прояснить, как работают компоненты Vue.
Для справки см .:
https://vuejs.org/v2/guide/components-registration.html
https://vuejs.org/v2/guide/components-edge-cases.html#X-Templates