提问者:小点点

如何在Vue中正确禁用基于条件的按钮


我正在尝试比较初始对象和更新对象的特定值,所以如果它们是相同的按钮应该被禁用。 然而,即使在禁用“更改”按钮之后:

  setDisabled(){
  return this.selectedItem.color === this.selectedItemInitial.color &&
  this.selectedItem.price === this.selectedItemInitial.price
  },

哪里出了问题,为什么它没有改变布尔值?


共3个答案

匿名用户

您定义的函数setdisables在呈现组件时执行一次,但在组件中的数据更改时不执行。

您应该将SetDisabled(并将其重命名为ButtonDisabled)移动到组件的计算属性。 这样,当组件中的dataprops更新时,它将得到更新:

computed: {
  buttonDisabled: function(){
        return this.selectedItem.color === this.selectedItemInitial.color && this.selectedItem.price === this.selectedItemInitial.price
   }
}

并在HTML中像这样使用它:

<!-- No parenthesis when using a computed property -->
<button :disabled="buttonDisabled"> ACTION </button>

匿名用户

您没有显示如何实例化组件数据,因此很难看出是否存在逻辑错误。

通常情况下,如果这样使用,该方法是有效的:

<button :disabled="setDisabled()"> ACTION </button>

另外,如果我建议您将其更改为计算属性:

computed: {
  setDisabled: function(){
        //logic here
   }
}

匿名用户

您也可以在模板中完成整个操作。 这取决于变量的设置方式。

<button :disabled="selectedItem.color === selectedItemInitial.color">Click</button>