【问题标题】:Vue toggle won't revert back, only toggles one way and onceVue切换不会恢复,只会切换一次
【发布时间】:2019-09-02 23:40:08
【问题描述】:

我觉得这应该可以工作并且相当简单,但我一生都无法弄清楚这一点。我正在制作一个以“暂停”作为文本开头的按钮,然后当按下按钮时,文本会变为 Resume

这很好用,但它永远不会切换回恢复?我需要这是一对一的切换,只需单击即可将其从一个切换到另一个。

我在这里做错了什么?

模板

<button class="btn btn-primary btn-block" v-on:click="pauseTask" type="button" role="button" id="" aria-expanded="false" style=" color: #6c757d border:none; border-radius: .15;">
    {{ pauseButton.text }}
</button>

Vue

data() {
    return {
        pauseButton: {
            text:'Pause'
        },
        isOpen: true
    }
},
pauseTask: function() {
      this.isOpen = !this.isOpen;
      this.pauseButton.text = app.isOpen ? 'Pause' : 'Resume';
    },

【问题讨论】:

  • app.isOpen 应该是this.isOpen

标签: javascript vue.js


【解决方案1】:

由于您使用了未定义的 app 变量,这看起来像是一个错字。

我建议您使用计算属性来决定要显示的文本,这样您就不必维护两个单独的数据属性。

new Vue({
  el: '#app',
  data: () => ({ isOpen: true }),
  computed: {
    pauseButtonText () {
      return this.isOpen ? 'Pause' : 'Resume'
    }
  },
  methods: {
    togglePause () {
      this.isOpen = !this.isOpen
    }
  }
})
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.min.js"></script>
<div id="app">
  <button @click="togglePause" type="button">
      {{ pauseButtonText }}
  </button>
</div>

【讨论】:

  • 啊,原来如此!非常感谢
  • @TomN。也要注意重新设计。从文本中分离出切换(我实际上是为其创建一个函数而不是嵌入到 click 中)使您的代码更加模块化
  • @KeithNicholas 如果切换不仅仅是翻转单个布尔值,我同意将其移至方法更好,但对于这种简单的情况,我认为使用模板表达式
  • 很公平,我不是根据它是否简单,更多的是设计的东西,所以事件与动作相关联,实现在动作内部,任何其他 UI 元素都可以触发该动作如果需要并且操作可以很容易地扩展,只是更加模块化......如果这是一种习惯,那么你总是可以对功能的位置做出很好的假设。但是是的,对于一个 SO 答案/琐碎的例子......没什么大不了的
  • @KeithNicholas 的优点。我已经更新了我的答案以使用一种方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
相关资源
最近更新 更多