Вам не нужно использовать <component>
, потому что у вас есть только один тип компонента, который вы хотите использовать: HelloWorld
. <component>
требуется только в том случае, если вы хотите динамически визуализировать различные типы компонентов.
Причина, по которой вам требуется <keep-alive>
, заключается в том, что компонент HelloWorld
имеет локальное состояние (msg
), которое будет потеряно после уничтожения экземпляра компонента.
Вам нужно будет использовать key
, чтобы заставить Vue создать новый экземпляр HelloWorld
на основе страницы, и вам потребуется <keep-alive>
для предотвращения каждого экземпляра от уничтожения при переключении между страницами.
Вот пример:
<ul>
<li
v-for="page in pages"
@click="currentPage = page"
:key="page.key">{{ page.title }}</li>
</ul>
<keep-alive>
<hello-world
:key="currentPage.key"
:title="currentPage.title"/>
</keep-alive>
import HelloWorld from './components/HelloWorld'
export default {
name: "App",
components: {
HelloWorld,
},
data() {
const pages = [
{
key: "home",
title: "Home"
},
{
key: "about",
title: "About"
},
{
key: "contact",
title: "Contact"
}
]
const currentPage = pages[0]
return {
currentPage,
pages
}
}
}