无法在 setTimeout 回调中以编程方式打开 Vuetify 对话框

Posted

技术标签:

【中文标题】无法在 setTimeout 回调中以编程方式打开 Vuetify 对话框【英文标题】:Can't open Vuetify dialog programmatically in setTimeout callback 【发布时间】:2020-01-03 03:00:04 【问题描述】:

默认情况下,Vuetify 对话框的显示由切换dialog 布尔变量值的按钮控制。

我假设以编程方式更改此变量的值将允许显示或隐藏对话框,但事实并非如此。为什么不呢?

这是我的代码:

<template>
  <div>
    <v-dialog v-model="dialog">
      <v-card>
        Dialog content
      </v-card>
    </v-dialog>
  </div>
</template>

<script>

export default 
  data() 
    return 
      dialog: false
    
  ,
  mounted() 
    console.log(this.dialog);
    setTimeout(function() 
      this.dialog = true;
      console.log(this.dialog);
    , 2000);
  

</script>

控制台在页面加载时显示false,然后在 2 秒后显示true。但是对话框仍然没有出现...

【问题讨论】:

【参考方案1】:

你应该使用箭头函数()=&gt;作为setTimeout回调:

  mounted() 
    console.log(this.dialog);
    setTimeout(()=> 
      this.dialog = true;
      console.log(this.dialog);
    , 2000);
  
看笔 Vuetify Dialog example by boussadjra (@boussadjra) 在CodePen。

【讨论】:

【参考方案2】:

您在调用 setTimeout 函数内的变量时遇到了一些问题。

试试这个:

<template>
  <div>
    <v-dialog v-model="dialog">
      <v-card>
        Dialog content
      </v-card>
    </v-dialog>
  </div>
</template>

<script>

export default 
  data() 
    return 
      dialog: false
    
  ,
  mounted() 
    that = this
    console.log(this.dialog);
    setTimeout(function() 
      that.dialog = true;
      console.log(that.dialog);
    , 2000);
  

</script>

尝试从与在匿名函数中调用 this 相关的问题中阅读此 answer

【讨论】:

以上是关于无法在 setTimeout 回调中以编程方式打开 Vuetify 对话框的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中以编程方式启用禁用 GPS? [复制]

在android中以编程方式关闭shift键

在 Android 中以编程方式打开位置提供程序

如何在Android中以编程方式打开MIUI系统Activity

在 iOS 6 中以编程方式打开地图应用

在 OS X 中以编程方式打开地图应用