首页 > 其他分享 >019、Vue3+TypeScript基础,使用watch监视对象数据时,如何监控整个对象或单独监控对象某个属性

019、Vue3+TypeScript基础,使用watch监视对象数据时,如何监控整个对象或单独监控对象某个属性

时间:2024-08-18 12:17:39浏览次数:7  
标签:TypeScript name 对象 car watch person 监控 c2 c1

1、App.vue代码如下:

<template>
  <div class="app">
    <h2>{{ title }}</h2>
    <!--    使用了ref来获取子组件的属性-->
    <Person/>
  </div>
</template>

<script lang="ts" setup name="App">
// JS或TS
import Person from './view/Person.vue'
import {ref} from 'vue'

let title = ref('好好学习,天天向上')

</script>

<!--样式 scoped表示仅本单元有效-->
<style scoped>
.app {
  background-color: #ddd;
  box-shadow: 0 0 10px;
  border-radius: 10px;
  padding: 20px;
}
</style>

2、Person.vue代码如下:

<template>
  <div class="person">
    <h2>姓名:{{ person.name }}</h2>
    <h2>年龄:{{ person.age }}</h2>
    <h2>汽车:{{ person.car.c1 }} 、{{ person.car.c2 }}</h2>
    <button @click="changeName">修改名字</button>
    <button @click="changeAge">修改年龄</button>
    <button @click="changeC1">修改第一台车</button>
    <button @click="changeC2">修改第二台车</button>
    <button @click="changeCar">修改整个车</button>
  </div>
</template>

<script lang="ts" name="Person001" setup>
import {reactive, watch} from 'vue'

let person = reactive({
  name: '张三',
  age: 18,
  car: {
    c1: '宝马',
    c2: '奥迪'
  }
})

function changeName() {
  person.name += '~'
}

function changeAge() {
  person.age += 1;
}

function changeC1() {
  person.car.c1 += '~'
}

function changeC2() {
  person.car.c2 += '~'
}

function changeCar() {
  person.car = {
    c1: '奔驰',
    c2: '比亚迪'
  }
}

// 情况1、监视响应式对象中的某个属性,只能监控到person.name的改变
// watch(() => {
//   return person.name
// }, (newVal, oldVal) => {
//   console.log('person.name变了:原:', newVal, '现在:', oldVal)
// })

// 情况2、只能监视整车,不能监视c1和c2
// watch(()=>person.car, (oldValue, onCleanup) => {
//   console.log('car变了:原:', oldValue, '现在:', onCleanup)
// })

// 情况3、只能监视c1和c2,不能监视整车
// watch(person.car, (oldValue, onCleanup) => {
//   console.log('car变了:原:', oldValue, '现在:', onCleanup)
// })

// 情况4、只能监视整车,同时能监视c1和c2。【最优解】
watch(() => person.car, (oldValue, onCleanup) => {
  console.log('car变了:原:', oldValue, '现在:', onCleanup)
}, {deep: true})

</script>
<style scoped>
.person {
  background-color: #ddd;
  box-shadow: 0 0 10px;
  border-radius: 10px;
  padding: 20px;

  button {
    margin: 0 5px;
  }
}
</style>

3、效果如下:

 

标签:TypeScript,name,对象,car,watch,person,监控,c2,c1
From: https://www.cnblogs.com/tianpan2019/p/18365458

相关文章

  • 020、Vue3+TypeScript基础,使用watch监视对象数据时,监控多种属性的修改
    01、App.vue代码如下:<template><divclass="app"><h2>{{title}}</h2><!--使用了ref来获取子组件的属性--><Person/></div></template><scriptlang="ts"setupname="App"......
  • java基础--day08面向对象以及键盘录入
    1.类和对象1.1类和对象的理解客观存在的事物皆为对象,所以我们也常常说万物皆对象。类类的理解类是对现实生活中一类具有共同属性和行为的事物的抽象类是对象的数据类型,类是具有相同属性和行为的一组对象的集合简单理解:类就是对现实事物的一种描述类的组成......
  • Delphi下将自己写的Form加入到对象库
    1、设计好窗体,在窗体空白的地方点击右键,在弹出的菜单中选中“AddtoRespository”。在弹出的对话框中填写标题、描述、作者等信息,选择存放的页。完成后点“OK”保存。2、打开Tools->Repository,选中相应的页,可以修改已加入对象(窗体)的属性或删除已加入的对象。相关资料:对象库(Obje......
  • 013、Vue3+TypeScript基础,computed计算属性的使用,结果会被缓存
    01、App.vue代码如下:<template><divclass="app"><h2>{{title}}</h2><!--使用了ref来获取子组件的属性--><Person/></div></template><scriptlang="ts"setupname="App"......
  • 012、Vue3+TypeScript基础,子页面使用defineExpose暴露成员来给主页面使用
    01、App.vue代码如下:<template><divclass="app"><h2>{{title}}</h2><button@click="showLog">点我数组子页面年龄</button><!--使用了ref来获取子组件的属性--><Personref="person001"/......
  • 011、Vue3+TypeScript基础,template中ref的用法意义
    1、如果多个页面都用同一个id,那么就会报错。用ref可以指明是某个元素,规避报错情况。App.vue代码如下:<template><divclass="app"><h2ref="title2">好好学习,天天向上</h2><button@click="showLog">点我输出h2元素</button><Person/&g......
  • Java基础——面向对象编程高级(常见关键字)
    package:用于声明一个类或接口所属的包(即命名空间)语法格式:package顶层包名.子包名OrderController类属于包com.hxzs.order.controller一个源文件只能有一个声明包的package语句package语句作为Java源文件的第一条语句出现。若缺省该语句,则指定为无名包。包名,属于标识符,满......
  • C++_类和对象(下篇)
    一、目标1.再谈构造函数2.Static成员3.友元4.内部类二、对目标的讲解1.再谈构造函数1.1构造函数体赋值在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。classDate{public: Date(intyear,intmonth......
  • 010、Vue3+TypeScript基础,通过toRefs和toRef把对象的属性变成响应式引用
    1、App.vue代码如下:<template><divclass="app"><h1>好好学习,天天向上</h1><Person/></div></template><script>//JS或TSimportPersonfrom'./view/Person.vue'exportdefault{//A......
  • 网络监控管理系统是什么?一站式网络监控,360°无死角管理,让运维工作事半功倍!
    在信息化高速发展的今天,企业的网络环境日益复杂,数据安全与运维效率成为了企业管理中的重中之重。为了应对这一挑战,安企神网络监控管理系统应运而生,它以一站式、360°无死角的管理策略,为企业的网络运维工作带来了革命性的变革,让运维工作事半功倍。一、什么是网络监控管理系统?......