Проблема
У меня есть дочерний компонент, который может существовать или не существовать на странице с v-if
. Попытка сохранить его в кеше, когда пользователь щелкнул по другим вещам, так что условия поиска и тому подобное снова появляются, когда пользователь возвращается, не удается, независимо от того, как я пытаюсь кешировать с помощью <keep-alive>
.
Что я пробовал
Документация , кажется, указывает на то, что все, что мне нужно сделать, это поместить мой компонент в тег <keep-alive>
, и все должно работать. Я попытался сопоставить некоторые документы, в которых используется тег <component>
, который явно не работает. Я также попытался использовать опору include
, так как просто завернуть ее не получилось.
Vue.component('child', {
template: '<div>child: {{text}}<div>',
data() {return {text: ""}},
created(){
this.$nextTick(() => {
this.text = `${Math.round(Math.random() * 100)}`
})
},
activated: function() {
this.$nextTick(() => {
console.log('in activated');
});
}
})
var vm = new Vue({
el: '#app',
data: function() {
return {
showNow:false,
message: 'This is a test.'
}
},
methods: {
changeText: function() {
this.message = 'changed';
},
toggle() {
this.showNow = !this.showNow
}
},
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.min.js"></script>
<div id="app">
<keep-alive include="child">
<div v-if="showNow">
<h4>Title of section to be toggled</h4>
<component is="child"></component>
</div>
</keep-alive>
<button @click="toggle()">toggle child</button>
</div>
Я также пытался не использовать include
, а просто переносить как <keep-alive><child></child></keep-alive>
или использовать синтаксис <component>
, и ни то, ни другое не работает.
Если вы удалите условный рендеринг, вызывается хук activated
, но это, очевидно, отрицательно сказывается на цели <keep-alive>
! В настоящее время этот хук никогда не вызывается, что разочаровывает.
Кроме того, пример в документации также не помогает, потому что они не используют v-if
, просто изменяя, какие компоненты отображаются через строку ....
PS Я не знаю, как пометить это, кроме Vue. js