I am not sure why the data is undefined despite passing the right property from the component.
This is my vue component
Vue.component('store-squaretile-component',{
template: '#store-squaretile-component',
props: [
'storeName'
],
data: function () {
return {}
},
});
This is its template
<script type='text/x-template' id='store-squaretile-component'>
<div >
<div >
<!-- background of store-squaretile to be set to img -->
<div >
<div data-bs-toggle="dropdown" >
<i ></i>
</div>
<ul id="dropdown-menu-store" >
<div >Quick Actions</div>
<div ></div>
<a href="#">Edit Store</a>
<a href="#">Delete Store</a>
</ul>
</div>
</div>
<div >{{storeName}}</div>
</div>
</script>
When i pass the component this array:
stores: [
{name: "harry's",},
{name: "Carl's junior",},
{name: "Mcdonald's",}
]
into this component
<store-squaretile-component
v-for="store in stores"
:storeName="store.name"
></store-squaretile-component>
it is suppose to suppose to replace the storeName with the name in the array but instead I get a NaN or the title disappears entirely.
I received an undefined value. Is there a reason for this?
CodePudding user response:
It's working fine, just replaced storeName with storename and added :key to v-for loop:
Vue.component('store-squaretile-component', {
template: '#store-squaretile-component',
props: ['storename'],
})
new Vue({
el: '#demo',
data() {
return {
stores: [
{name: "harry's", },
{name: "Carl's junior",},
{name: "Mcdonald's",}
]
}
}
})
Vue.config.productionTip = false
Vue.config.devtools = false
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="demo">
<store-squaretile-component
v-for="(store, idx) in stores"
:storename="store.name"
:key="idx"
></store-squaretile-component>
</div>
<script type='text/x-template' id='store-squaretile-component'>
<div >
<div >
<div >
<div data-bs-toggle="dropdown" >
<i ></i>
</div>
<ul id="dropdown-menu-store" >
<div >Quick Actions</div>
<div ></div>
<a href="#">Edit Store</a>
<a href="#">Delete Store</a>
</ul>
</div>
</div>
<div >{{storename}}</div>
</div>
</script>

