【发布时间】:2018-04-04 09:25:47
【问题描述】:
我有一个 VueJS 组件 <managed-list>,我在同一个模板中使用了两次来显示两组不同的数据。每个都显示在自己的<section> 容器中,该容器使用导航选项卡上的v-if 进行切换。
似乎这些组件被实例化为同一个实例。我在组件的created 挂钩中调用console.log(),并在页面加载时收到一条消息到控制台。然而,当我点击显示另一个数据表时,相应的v-if 的模板会呈现,但created 钩子不会再次触发。
我的理解是,当在模板中使用v-if 语句时,组件会被正确地创建和销毁。但这似乎并没有在我的情况下发生。我做错了吗?
<template>
<div>
<ul class="nav nav-tabs">
<li class="nav-item">
<router-link class="nav-link" :class="{active: $route.params.tab=='reports'}" to="reports">Reports</router-link>
</li>
<li class="nav-item">
<router-link class="nav-link" :class="{active: $route.params.tab=='snippets'}" to="snippets">Snippets</router-link>
</li>
</ul>
<section v-if="$route.params.tab == 'reports'">
<h2>Reports</h2>
<managed-list
:imports-disabled="true"
prop-delete-endpoint="ReportTemplate/delete"
prop-resource-url="ReportTemplate"
:prop-fetch-url="'ReportTemplate/filter?filters='+reportFilter"
prop-edit-action="/reports/templates/edit/{?}">
</managed-list>
</section>
<section v-else-if="$route.params.tab == 'snippets'">
<h2>Snippets</h2>
<managed-list
:imports-disabled="true"
prop-delete-endpoint="ReportTemplate/delete"
prop-resource-url="ReportTemplate"
:prop-fetch-url="'ReportTemplate/filter?filters='+snippetFilter"
prop-edit-action="/reports/templates/edit/{?}">
</managed-list>
</section>
</div>
</template>
<script>
import ManagedList from "./ManagedList"
import bus from '../bus.js'
export default {
name: 'ReportTemplates',
components: {
ManagedList
},
data() {
return {
snippetFilter : JSON.stringify([
["is_snippet","=", 1]
]),
reportFilter : JSON.stringify([
["is_snippet","=", 0]
])
}
},
created() {
console.log(this.snippetFilter, this.reportFilter)
}
}
</script>
【问题讨论】:
标签: vuejs2 vue-component