Demo9.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <template>
  2. <div>
  3. <h2>Demo9</h2>
  4. <p>watch:监听reactive/ref定义的引用数据类型中的某个属性</p>
  5. <p>我叫{{ obj.name }},今年{{ obj.age }}岁,我有一个{{ obj.car.c1 }}和一个{{ obj.car.c2 }}</p>
  6. <button @click="changePerson">修改整体</button>
  7. <button @click="changeName">修改名字</button>
  8. <button @click="changeCar1">修改第一辆车</button>
  9. <button @click="changeCar">修改整体车</button>
  10. </div>
  11. </template>
  12. <script lang="ts" setup>
  13. import {ref,reactive,watch} from "vue"
  14. let obj = reactive({
  15. name:'小明',
  16. age:10,
  17. car:{
  18. c1:'摩托车',
  19. c2:"自行车"
  20. }
  21. })
  22. console.log(obj,'obj')
  23. function changeName() {
  24. obj.name = '小红';
  25. }
  26. function changePerson() {
  27. // obj = {
  28. // name:'天天',
  29. // age: 7
  30. // }
  31. // obj.name = '天天';
  32. // obj.age = 7;
  33. Object.assign(obj,{
  34. name:'天天',
  35. age: 7,
  36. car:{
  37. c1:1,
  38. c2:2
  39. }
  40. })
  41. }
  42. function changeCar1() {
  43. obj.car.c1 = '摩托车1'
  44. }
  45. function changeCar() {
  46. obj.car = {
  47. c1:"花花",
  48. c2:'图图'
  49. }
  50. }
  51. watch(()=>obj.car,(newValue,oldValue)=>{
  52. console.log(newValue,oldValue,'第四种')
  53. },{
  54. deep: true,
  55. immediate: true
  56. })
  57. // watch(()=>obj.name,(newValue,oldValue)=>{
  58. // console.log(newValue,oldValue,'第四种')
  59. // },{
  60. // deep: true,
  61. // immediate: true
  62. // })
  63. </script>
  64. <style lang="scss" scoped>
  65. </style>