Vue.js (VueJS)在显示时更新组件
我想要一种在组件重新显示时运行函数(与后端对话)的方法 我知道如果组件通过Vue.js (VueJS)在显示时更新组件,vue.js,Vue.js,我想要一种在组件重新显示时运行函数(与后端对话)的方法 我知道如果组件通过v-if指令重新添加到DOM中,mounted钩子将触发。但是,如果组件被隐藏并通过v-show指令重新显示,则不会触发。我需要更新组件,不管哪个指令控制它的可见性 我查看了更新的钩子,但这似乎不是缩进的用例 如何在显示组件时运行函数(不仅仅是第一次)?您可以通过几种方式实现这一点。然而,既然你想得到v-show的方式,我建议你这样做 v-show(v-show,watcher): v-show肯定取决于变量(数据或计算)
v-if
指令重新添加到DOM中,mounted
钩子将触发。但是,如果组件被隐藏并通过v-show
指令重新显示,则不会触发。我需要更新组件,不管哪个指令控制它的可见性
我查看了更新的钩子,但这似乎不是缩进的用例
如何在显示组件时运行函数(不仅仅是第一次)?您可以通过几种方式实现这一点。然而,既然你想得到v-show的方式,我建议你这样做
v-show(v-show,watcher):
v-show肯定取决于变量(数据或计算)。创建一个观察者,以观察数据/计算属性的更改。根据data/computed属性的值,执行您想要在watcher上执行的任何函数。也许您可以通过两种方式实现它
1.使用:键
无论何时,无论组件是否显示,都要重新启用组件,更改key的值可以重新启用组件
文本
导出默认值{
数据(){
返回{
key:this.getRandomString()
}
},
方法(){
getRandomString(长度=32){
设chars='ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';
设max_pos=字符长度;
让随机_字符串=“”;
for(设i=0;i
使用vm.$forceUpdate()
。。。
你的方法(){
//与后端通信
让data=等待axios.get(…);
这是.$forceUpdate();
}
...
updated
在传递到组件的数据发生更改时触发。因此,如果您以道具的形式在任何条件下传递控制您的v-show
,则它将起作用
一般示例:
Vue.config.devtools=false;
Vue.config.productionTip=false;
Vue.component('子'{
道具:{
显示:{
类型:布尔型,
默认值:true
}
},
模板:“{show}}”,
安装的(){
console.log(“子安装”);
},
更新的(){
//任何道具改变时运行
//(可选条件)仅在显示组件时运行
如果(如图所示){
console.log('child updated');
}
}
});
新Vue({
el:“#应用程序”,
数据:()=>({
真的吗
})
})
秀给孩子看
为组件提供一个名为“可见”的必要道具,或类似的道具,并观察其是否存在changes@Phil理想情况下,我正在寻找一种更紧凑的方法来实现这一点。例如,如果我有两个嵌套的v-show
指令,我将不得不注意这两种情况。听起来效率很低。您可以运行一个循环来实现这两种情况.$el
(说使用)但在我看来,最好是命令式的,通过道具告知组件其可见性。我明白你的意思,但理想情况下,我希望将逻辑封装在组件中。由于组件可以在多个位置使用,并且非常适合通用,我认为此实现有点复杂ponent可能嵌套在多个v-show
子句中。然后我必须将每个条件传递到prop中。不是吗?@Carter,我认为您的模型有点复杂,而不是实现。但您可以轻松简化它:如果您总是将父show
属性添加到子条件中,则显示的父级<代码>将传播到所有子级,任意深度的级别。条件是始终将当前级别的<代码>显示的<代码>添加到任何子级的<代码>显示的<代码>中,并且永不断开链(:show=“show&&showChild”
)。此外,您还有什么其他选择?不管怎样,我们在这里讨论的复杂程度与您的问题要求之间存在差异。请提供a,我可能会建议一个更适合的模型。好的,我将接受您的答案,因为我认为这是最好的答案。我可能稍后再问另一个问题更具体到我的需要(有一些例子)。谢谢你的帮助。