我正在尝试将布尔变量设置为false以在Vue 2中打开对话框之前关闭菜单。
public saveScreens() {
this.showThreeDotMenu = false
this.$emit('save-screens')
}
我想同步执行这两行,但是无论如何我都找不到在分配完成之前发生$ emit的情况。
我尝试将赋值语句外推到它自己的函数设置中,使其异步,然后在saveScreens()中命中该函数,然后.then(()=> this。$ emit('save-screens'))然而,这仍然不起作用。
无论我尝试了什么,都会打开电子消息框,然后在关闭后将布尔值设置为false,然后关闭菜单。
有什么方法可以等到我使用v-if的条件HTML完成隐藏后再执行一个函数?
使用电子1.8.8和Vue 2.x +
答案 0 :(得分:1)
我想出的唯一简单的解决方案是使用public class TestAA3 {
public static void main(String[] args) {
int day = getDay("04/09/2034");
System.out.print(day);
}
public static String getSubstring( String s, int i, int j) {
// declaring the String that will eventually be modified and returned by the method
String Substring = " ";
// error message
if (j<i) {
throw new IllegalArgumentException("The second integer must be greater than the first");
} else {
// defining the limits of the new string
for ( int position = i;position<=j; position++) {
// new value of the String
Substring += " " + s.charAt(position);
}
return Substring;
}
}
// calling getSubstring and defining the position inside the string of the int that will be returned
public static int getDay(String s) {
if (s.charAt(0)==0){
String dayString = getSubstring(s,1,1);
return Integer.valueOf(dayString);
} else {
String dayString = getSubstring(s,0,1);
return Integer.valueOf(dayString);
}
}
}
来延迟对话框的显示(如注释中所述,setTimeout
不能解决问题)。我制作了一个演示片段,您可以在其中更改超时间隔。在我的浏览器上,大约10毫秒左右有效。我建议使用50之类的东西在任何地方都相当安全。
对于要隐藏并再次显示的内容,我会使用nextTick
而不是v-show
。
v-if
new Vue({
el: '#app',
data: {
showMenu: true,
delay: 10
},
methods: {
showDialog() {
this.showMenu = false;
setTimeout(() => {
alert('this is a dialog');
this.showMenu = true;
}, this.delay);
}
},
components: {
threeDotMenu: {
template: '#three-dot-menu-template',
props: ['show'],
methods: {
openDialog() {
this.$emit('save-screens');
}
}
}
}
});
.menu {
background-color: #fee;
padding: 2em;
}