为啥从计算切换到方法时,以下 Vue.js 代码不起作用?

Posted

技术标签:

【中文标题】为啥从计算切换到方法时,以下 Vue.js 代码不起作用?【英文标题】:Why does the following Vue.js code not work when switching from computed to methods?为什么从计算切换到方法时,以下 Vue.js 代码不起作用? 【发布时间】:2019-03-29 15:13:39 【问题描述】:

在以下代码中:

https://jsfiddle.net/willywg/2g7m5qy5/

根据复选框的状态禁用按钮。

但是当我改变时:

  computed: 
    isDisabled: function()
        return !this.terms;
    
  

  methods: 
    isDisabled: function()
        return !this.terms;
    
  

启用/禁用不再起作用。

这是为什么?

根据文档:

https://vuejs.org/v2/guide/computed.html

在这个例子中两者的工作方式不应该相同吗?

【问题讨论】:

因为计算是反应性的,方法不是。如果在这种情况下使用方法,则每次检查/取消检查输入时都需要调用该方法。 【参考方案1】:

计算属性会查找更改,但需要使用 @change 或 @click 之类的方式调用方法。在这种情况下,您实际上可以只绑定您的数据对象而无需任何一个。

<div id="app">
  <p>
    <label for='terms'>
      <input id='terms' type='checkbox' v-model='terms' /> I accept terms!!!
    </label>
  </p>
  <button :disabled='!terms'>Send Form</button>
</div>

new Vue(
  el: '#app',
  data: 
    terms: false
  
)

【讨论】:

【参考方案2】:

计算和方法是两个不同的东西

方法:当你想做某事时调用,比如调用一个动作/突变或做一些除了处理存储/状态之外的事情

computed:你可以使用返回值来绑定模板html中的东西,一些变化的值会根据一些计算而变化。如果它不会改变,那么只需将其绑定到日期/状态

在您当前的脚本中计算定位 isDisabled 数据一直在变化。 因此,每当您的数据更改其功能时,都会自动触发。

但是,如果您希望在方法中使用此功能,则应手动触发该功能。 示例:

<input id='terms' type='checkbox' v-model='terms' @change="isDisabled" /> I accept terms!!!

当它发生变化时,它会调用 isDisabled 方法。

更多详情Methods vs Computed。谢谢

【讨论】:

以上是关于为啥从计算切换到方法时,以下 Vue.js 代码不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js - 从一个组件切换到另一个

Vue.js 使用 v-for 单击时切换类

为啥要在 vue.js 中计算属性?

从 Vue.js 2 中的计算属性中推送到数组

Vue.js:使用方法切换动态数据的 CSS 类

为啥从Vue.js中的列表中删除项目时移动转换需要绝对位置