我有一个简单的网页,其中显示了结果列表,用户可以在表格或 li 样式之间进行切换。
我得到了具有两个动态组件的简单Vue:结果数组和结果列表。
除了当我从第一个组件切换到第二个组件之外,它的工作原理就像一种魅力:我释放了在胡须中调用的结果属性(我得到了没有错误的空白值):
{{contact.img_path}} does not show anything
而
<img :src="contact.img_path" /> works great
**更新** 这里有一个简化的jsfiddle可以尝试:https://jsfiddle.net/eywraw8t/151906/
我的文件:
contact.js
var list = Vue.component('results-list', {
template: '#results-list-template',
props: ['display_mode', 'contacts']
});
var table = Vue.component('results-array', {
template: '#results-array-template',
props: ['display_mode', 'contacts'],
});
const app = new Vue({
el: '#app',
router,
data: {
currentResultsView: 'results-array',
display_mode: 'array',
contacts: [],
contact: { company: {}, phones: {}, section: {}, schedule_type: {}}, // Declaring Reactive Properties
phone: {} // Declaring Reactive Properties
},
created () {
this.navigate(this.$route.query.page);
},
methods: {
changeDisplay: function(event, type){
this.currentResultsView = (type == "array") ? "results-array" : "results-list";
this.display_mode = type;
console.log('contacts', this.contacts[0].lastname) // WORKS !
},
navigate: function(page){
var page = page > 0 ? page : 1;
axios.get('/', {params: {page: page, fulltext_search: this.fulltext_search, sort_dir: this.sort_dir}})
.then((response) => {
this.contacts = response.data.entries;
});
}
}
});
index.html
<ul>
<li @click="changeDisplay($event, 'hcard')" :class="{active:display_mode == 'hcard'}">Carte de visite</li>
<li @click="changeDisplay($event, 'vcard')" :class="{active:display_mode == 'vcard'}">Vignette verticale</li>
<li @click="changeDisplay($event, 'array')" :class="{active:display_mode == 'array'}">Tableau</li>
</ul>
<div id="app">
<script type="text-x-template" id="results-array-template">
<table>
<tr>
<th></th>
<th>Firstname</th>
<th>Lastname</th>
</tr>
<tr v-for="contact in contacts">
<td><img :src="contact.img_path" class="contact_img" /></td>
<td>{{ contact.firstname }}</td>
<td>{{ contact.lastname }}</td>
</tr>
</table>
</script>
<script type="text-x-template" id="results-list-template">
<ul>
<li v-for="contact in contacts">
{{contact.firstname}} <!-- **Does not show anything** -->
<img :src="contact.img_path" /> <!-- **Works great!** -->
</li>
</ul>
</script>
<div id="results" :class="display_mode" class="clearfix">
<keep-alive>
<component v-bind:is="currentResultsView" :display_options="display_options" :display_mode="display_mode" :contacts="contacts" ></component>
</keep-alive>
</div>
</div>
答案 0 :(得分:0)
您应该从Vue根实例的contact
部分中删除密钥data
,或在v-for
迭代器中使用其他名称(例如v-for="myContact in contacts"
)>
此外,您不应为模板使用script
标签,而应使用template
,因为Chrome会忽略非JavaScript script
标签。
解决方案-https://codepen.io/TMCDOS/pen/gjYWNY
答案 1 :(得分:0)
解决方案是将两个模板脚本移至#app div之外