当我们需要对某个数据进行简单判断渲染的时候,我们通常会使用如下方法
- <div>
- nginx当前状态:{{ openNginx == true ? 'true' : 'false'}}
- div>
但是这样就很影响观感,因为渲染出来的只有openNginx的值,而没有后面的表达式
这样我们就可以借助计算属性,将其封装成方法表达,代码如下
- <div>
- nginx当前状态:{{ openNginxValue }}
- div>
- const openNginxValue = computed(() => {
- return openNginx.value == true ? "true" : "false";
- })
两者的表达效果一直,但是后者的代码易读性强许多
但是这样和普通的函数方法有什么区别呢???
函数方法写法如下
- <div>
- nginx当前状态:{{ openNginxValue() }}
- div>
- const openNginxValue = () => {
- return openNginx.value == true ? "true" : "false";
- }
区别就是计算属性具有缓存,当下次调用这个值的时候,只要他不被触发响应式的更新,他就会直接返回其数值,而函数每次渲染都会重新计算
还有一个特点就是计算属性是可读的,直接修改计算属性的值会报警告

但是我们也可以通过如下形式来对计算属性进行“赋值”
- <button @click="giveComputeValue"> 点击我开启nginxbutton>
- <div>
- nginx当前状态:{{ openNginxValue }}
- div>
- const openNginxValue = computed( {
- get() {
- return openNginx.value == true ? "true" : "false";
- },
- set(value) {
- alert("我被赋值了,但是翻转的是openNginx的值")
- openNginx.value = !openNginx.value;
- }
- })
- const giveComputeValue = () => {
- openNginxValue.value = "false";
- }
我们点击button调用giveComputeValue箭头函数方法,其对openNginxValue响应式赋值,被计算属性openNginxValue的set方法捕获,从而执行对响应式变量openNginx进行翻转,实现了对计算属性的《表面赋值》

- <template>
- 我是计算属性测试!!
- <br>
- <button @click="giveComputeValue"> 点击我开启nginx</button>
- <div>
- nginx当前状态:{{ openNginxValue }}
- </div>
- </template>
-
- <script lang="ts" setup>
- // import { defineComponent } from '@vue/composition-api'
-
- import { computed, ref } from 'vue'
-
- const nums = ref(0);
- const openNginx = ref(false);
-
- const open = () => {
- openNginx.value = !openNginx.value;
- }
- const openNginxValue = computed( {
- get() {
- return openNginx.value == true ? "true" : "false";
- },
- set(value) {
- alert("我被赋值了,但是翻转的是openNginx的值")
- openNginx.value = !openNginx.value;
- }
- })
-
- const giveComputeValue = () => {
- openNginxValue.value = "false";
- }
- // const openNginxValue = () => {
- // return openNginx.value == true ? "true" : "false";
- // }
-
- // const changeCalc = () => {
- // openNginxValue.value = true;
- // }
- </script>
-
- <style>
-
- </style>