Vue知识点6-computed计算属性

  1. v-model 双向绑定 :绑定 ref 响应式变量,输入框修改会同步更新 name、age

  2. ref 定义基础响应式数据

    • ref("张三") / ref(18),得到 RefImpl 响应式包装对象
    • 在 JS/TS 代码里访问、修改必须加 .value;模板中直接写变量名不用 .value
  3. computed 计算属性两种写法

    • ✅ 简写形式(只读 ):只传一个 getter 函数,不能直接给 computed变量.value 赋值
    • ✅ 对象形式(可读可写 ):配置 get() 和 set()
      • get():读取计算属性时触发,返回计算结果
      • set(新值):给计算属性赋值时触发,接收赋过来的新值,内部去修改底层响应式数据(name、age)
  4. 可写 computed 执行流程(示例)

    复制代码
    introduce.value = "王五-20" 
    → 触发 set,latest = "王五-20"
    → split 拆分字符串,分别赋值给 name.value、age.value
    → name、age 更新 → 触发 get,重新计算 introduce
  5. 事件点击函数 :@click 绑定方法,方法内部修改 ref.value 驱动视图更新

  6. 单文件组件双 script 说明

    • <script lang="ts">:选项式,这里用来配置组件 name
    • <script lang="ts" setup>:setup 语法糖,写组合式 API(ref/computed),推荐写法
  7. 样式 :普通 css,作用域这里没有加 scoped,样式是全局生效

一句话核心

只读 computed 只能读 ;配置 get+set 的 computed 支持赋值写入,赋值时进入 set 函数,在 set 里更新原始响应式数据。

html 复制代码
<template>
  <div class="person">
    <!--v-model是双向绑定的 -->
    <input type="text" v-model="name"><br>
    <input type="text" v-model="age"><br>
    <span>{{ introduce }}</span><br>
    <button @click="changeName">改变名称</button>
    <button @click="changeIntroduce">改变介绍</button>
  </div>
</template>


<script lang="ts">
//导出组件名称,叫做"App"
export default {
  name: "Person"
}
</script>

<script lang="ts" setup>
import {computed, ref} from "vue"

let name = ref("张三")
let age = ref(18)
//这种是只可读的,返回的是RefImpl
// let introduce = computed(() => {
//   return name.value + ":" + age.value
// })

//这种是可读可写的,返回的是RefImpl
let introduce = computed({
  get() {
    return name.value + ":" + age.value
  },
  set(latest) {
    console.log(latest) //王五-20,来自于changeIntroduce方法
    const [str1, str2] = latest.split("-")
    name.value = str1
    age.value = Number(str2)
  }
})

function changeName() {
  //name是响应式对象RefImpl,所以要用.value读取值
  name.value = "李四"
}

function changeIntroduce() {
  //这里会触发Computed计算中的set方法,并且把值传递给latest变量
  introduce.value = "王五-20"
}
</script>

<style scoped>
.person {
  background-color: green;
}
</style>

v-model实现双向绑定

javascript 复制代码
<template>
  <input v-model="name" />
  <p>你输入的:{{ name }}</p>
</template>

<script setup>
import { ref } from 'vue'
const name = ref('')
</script>
相关推荐
程序员海军1 小时前
尤雨溪 : Vue 4 已经在规划中了!
前端·javascript·vue.js
2601_949970692 小时前
HumanizeDuration 跨端三方库仓颉适配全流程
前端·javascript·flutter
风骏时光牛马3 小时前
后端服务接口开发与性能优化
前端
kyriewen3 小时前
我让 4 个 AI 互相 review 代码,最温柔的那个下手最狠
前端·程序员·ai编程
计算机魔术师4 小时前
493家公司白砸AI钱?Apollo这组数据戳破了幻觉
前端
IT_陈寒4 小时前
Java静态变量初始化坑得我头皮发麻
前端·人工智能·后端
天外飞雨道沧桑4 小时前
我在浏览器里练了一个 792 参数的大模型,它学会了补全 JavaScript
开发语言·javascript·ai·ecmascript·ai编程
柳杉4 小时前
用 Codex 完成智慧高速 3D 可视化大屏,从 18 张行业设计稿到可交互的运行监测中心
前端·ai编程·数据可视化
review445434 小时前
拿到 codex 第一步
前端·agent·vibecoding