computed常规使用

<template>
  <div>不带参:{{ result }}</div>
</template>
<script>
export default {
  data() {
    return {
      num: 10
    };
  },
  computed: {
    result() {
      return this.num * 2;
    }
  },
}
</script>

computed传参使用遇到的问题

但是在某些场合下,我们需要传入参数以便计算属性根据动态计算展示结果,于是我尝试使用以下方式来进行computed的传参及收参使用

<template>
  <div>
    参数为5,但使用错误会报错:{{ errResult(5) }} 
  </div>
</template>
<script>
export default {
  data() {
    return {
      num: 10
    };
  },
  computed: {
    errResult(e) {
      // 报错,提示 errResult is not a function
      return this.num * e;
    }
  },
}
</script>

按照常规方式使用的话,会提示这个计算属性不是一个函数,原因在于执行渲染errResult()时,Vue默认先从data及computed里查找errResult,如果没有找到,则会在methods里面继续查找errResult函数。

在上面这个代码里
Vue在html部分渲染时发现有{{ errResult() }}

Vue认为这是个函数,之后在computed里找到了errResult

但由于errResult是个计算属性,返回的是一个普通的计算结果数字/字符串,于是报错了。

既然这样,那我们就给这个计算属性返回一个函数

解决方案-computed计算属性带参

<template>
  <div>参数为5:{{ sucResult(5) }}</div>
  <div>参数为9:{{ sucResult(9) }}</div>
</template>
<script>
export default {
  data() {
    return {
      num: 10
    };
  },
  computed: {
    sucResult() {
      // 在返回的函数这边传入形参
      return (e) => {
        return this.num * e;
      };
    }
  },
}
</script>

总结梳理

最后附上结果图片及完整测试代码
在这里插入图片描述

<template>
  <h2>计算属性是否带参</h2>
  <div>不带参:result -> {{ result }}</div>
  <br />
  <div>
    参数为5,但使用错误会报错:errResult(5) <br />
    <br />
    报错提示 errResult is not a function
    <!-- {{ errResult(5) }} -->
  </div>
  <br />
  <div>参数为5:sucResult(5) -> {{ sucResult(5) }}</div>
  <br />
  <div>参数为9:sucResult(9) -> {{ sucResult(9) }}</div>
</template>
<script>
export default {
  data() {
    return {
      num: 10
    };
  },
  computed: {
    result() {
      return this.num * 2;
    },
    errResult(e) {
      // 报错,提示 errResult is not a function
      return this.num * e;
    },
    sucResult() {
      // 在返回的函数这边传入形参
      return (e) => {
        return this.num * e;
      };
    }
  },
}
</script>
Logo

前往低代码交流专区

更多推荐