问题
我有一个子组件,它可能存在于页面上,也可能不存在.当用户单击其他内容时,try 将其缓存,这样无论我如何try 使用<keep-alive>
缓存,当用户返回时,搜索词和其他内容都不会再次显示.
我试过的
documentation似乎表明我所需要做的就是将我的组件包装在<keep-alive>
标签中,这样就可以正常工作了.我试着匹配一些使用<component>
标签的文档,但显然不起作用.我也试过使用include
props ,因为仅仅包装它不起作用.
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>
我也try 过不使用include
,只是像so <keep-alive><child></child></keep-alive>
那样包装,或者使用<component>
语法,这两种方法都不管用.
如果移除条件渲染,将调用activated
钩子,但这显然违背了<keep-alive>
的目的!就目前而言,这个钩子从未被调用,这令人沮丧.
此外,文档中的the example也没有帮助,因为它们没有使用v-if
,只是更改了通过字符串呈现的组件....
另外,除了Vue,我不知道如何给它贴标签.js