javascript - 在 window.confirm() 之前更改属性

标签 javascript vue.js

下面是我的代码:

<a
  @click="destroy"
  :class="['button', { 'is-loading': deleting }]"
>
  Delete
</a>

data: () => ({
  deleting: false
}),
destroy () {
  this.deleting = true

  if (!confirm('Sure?') {
    this.deleting = false
    return
  }
}

结果会显示一个模式对话框,并且this.deleting is not true :/

是否可以在对话框之前更改删除属性?

最佳答案

在出现确认对话框时,UI 似乎尚未更新。您可以使用 setTimeout(func, 0) 稍微延迟确认对话框,以确保 UI 已更新。

它应该类似于:

destroy () {
  this.deleting = true

  // Store reference to `this` for access during callback.
  var self = this;

  setTimeout(function() {
      if (!confirm('Sure?') {
        // self - refers to `this` in the outer context.
        self.deleting = false
        return
      }
  }, 0);
}

或者

destroy () {
  this.deleting = true

  setTimeout(() => {
      if (!confirm('Sure?') {
        this.deleting = false
        return
      }
  }, 0);
}

requestAnimationFrame 也可能是一个不错的选择。

参见:How to tell when a dynamically created element has rendered

注意:我还没有对此进行测试,因为您的问题中没有 MCVE。

关于javascript - 在 window.confirm() 之前更改属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52072570/

相关文章:

javascript - native 菜单不显示 OS X Electron

javascript - 用于搜索产品的 Ebay.com 查询字符串是什么?

javascript - Webpack 插件开发 - 函数调用父函数的参数

javascript - Vue 组件的 prop 未定义( fatal error )

javascript - 使用 Vue.JS 向元素添加类

javascript - IE7 误读页面上带有 Javascript 选项卡导航的 CSS

javascript - Reactjs组件的异步渲染

node.js - 如何在 nuxt js 中使用 vuetify 作为插件?

vue.js - 如何配置 `I18n Ally` VsCode 插件以从单个文件读取我的本地文件?

vue.js - 映射的 Vuex 函数 "is not a function",但仍然加载