App.vue 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <template>
  2. <h2>计算属性和监听属性</h2>
  3. <fieldset>
  4. <legend>姓名操作</legend>
  5. 姓氏: <input type="text" v-model="user.firstName" />
  6. <br />
  7. 名字: <input type="text" v-model="user.lastName" />
  8. </fieldset>
  9. <fieldset>
  10. <legend>计算属性和监听的演示</legend>
  11. 姓名: <input type="text" v-model="fullName1" /><br />
  12. 姓名: <input type="text" v-model="fullName2" /><br />
  13. 姓名: <input type="text" v-model="fullName3" />
  14. </fieldset>
  15. </template>
  16. <script lang="ts">
  17. import { defineComponent, computed, watch, ref, reactive ,watchEffect} from "vue";
  18. export default defineComponent({
  19. setup() {
  20. const user = reactive({
  21. firstName: "小猪",
  22. lastName: "佩奇",
  23. });
  24. //通过计算属性的方式
  25. //vue3中的计算属性
  26. const fullName1 = computed(() => {
  27. return user.firstName + "_" + user.lastName;
  28. });
  29. const fullName2 = computed({
  30. get() {
  31. return user.firstName + "_" + user.lastName;
  32. },
  33. set(val: string) {
  34. const names = val.split("_");
  35. user.firstName = names[0];
  36. user.lastName = names[1];
  37. },
  38. });
  39. const fullName3 = ref("");
  40. watch(
  41. user,
  42. ({ firstName, lastName }) => {
  43. fullName3.value = firstName + "_" + lastName;
  44. },
  45. {
  46. immediate: true,
  47. deep: true,
  48. }
  49. );
  50. //immediate 一开始执行一次 deep深度监视
  51. //监视
  52. // watchEffect(()=>{
  53. // fullName3.value = user.firstName + '_' + user.lastName
  54. // })
  55. //监视fullName3的数据 去改变firstName和lastName
  56. // watchEffect(()=>{
  57. // const names = fullName3.value.split('_')
  58. // user.firstName = names[0]
  59. // user.lastName = names[1]
  60. // })
  61. //fullName3 是响应式数据
  62. // watch([user.firstName,user.lastName,fullName3],()=>{
  63. // console.log('========')
  64. // })
  65. //如果非要监听非响应式数据的时候
  66. watch([()=>user.lastName,()=>user.firstName],()=>{
  67. console.log('!!!!')
  68. })
  69. return {
  70. user,
  71. fullName1,
  72. fullName2,
  73. fullName3,
  74. };
  75. },
  76. });
  77. </script>
  78. <style scoped>
  79. </style>