Java登陆第三十八天——VUE3双向绑定,监听器(侦听器)

单向绑定

之前学习的栗子,都是单向绑定。

单向绑定: 响应式数据对象的变化会更新dom树,用户的某些操作造成的数据更新,不会同步更新到响应式数据对象。

栗子

App.vue

<script setup>
import {ref, reactive} from 'vue';
let msg = ref("hello");
</script>

<template>
  <input v-bind:value="msg" type="text"><br>
  {{ msg }}
</template>

<style scoped>
</style>

效果展示
image

可以看到,尽管更改了输入框的值,但该响应式数据对象还是未更新。

双向绑定

双向绑定,也叫表单输入绑定。

双向绑定: 响应式数据的变化会更新dom树,用户的某些操作造成的数据更新,也会同步更新到响应式数据对象。

提供了一种双向绑定命令:v-model

语法格式如下:

<标签 v-model=" 数据源 "></标签>

双向绑定的特点:

  1. 常用表单中。
  2. 可以加修饰符。.lazy:input标签触发change事件后才更新数据。

栗子

App.vue

<script setup>
import {ref, reactive} from 'vue';
let msg = ref("hello");
</script>

<template>
  <input v-model="msg"  type="text"><br>
  {{ msg }}
</template>

<style scoped>
</style>

效果展示
image

单向绑定和双向绑定

image

监听器(侦听器)

监听器类似于JavaWeb中的Listener。当某对象发生改变时会触发特定的函数。

提供了两种监听器函数:watch和watchEffect

语法格式如下:

watch(监听对象,function (newValue, oldValue) {
//要执行的函数方法体,该function一般写成箭头函数
})

watchEffect(执行的函数)

监听器的特点:(下面所说的对象,大部分对象都是响应式数据对象)

  1. 因为是函数,所以需要从vue引入。

  2. watch函数的监听对象,可以是对象的某个属性,也可以是某个对象。

  3. watchEffect监听所有对象,所以只需要写执行的函数即可。

watch栗子

App.vue

<script setup>
import {ref, reactive, watch, watchEffect} from 'vue';

let msg = ref("hello")

watch(msg, function (newValue, oldValue) {

  console.log(oldValue + "变为->" + newValue);
})
</script>

<template>
  <input v-model="msg" type="text">
  <h3 v-text="msg"></h3>
</template>

<style scoped>
</style>

效果展示
image

在监听对象是ref函数生成的响应式数据对象时,会默认指向监听对象.value。

此时的newValue和OldValue都是监听对象.value。如果再写成

watch(msg, function (newValue, oldValue) {
  console.log(oldValue.value + "变为->" + newValue.value);
})

控制台就会输出undefind。

watchEffect栗子

App.vue

<script setup>
import {ref, reactive, watch, watchEffect} from 'vue';

let msg = ref("hello")
watchEffect(function () {
  console.log(msg.value+"变为->"+msg.value)
})

</script>

<template>
  <input v-model="msg" type="text">
  <h3 v-text="msg"></h3>
</template>

<style scoped>
</style>

效果展示
image

watchEffect函数监听了所有响应式数据对象,直接写该对象即可。访问ref函数生成的响应式数据对象时,需要.value访问其值。

这里不展示监听reactive函数生成的响应式数据对象。

posted @ 2024-04-05 00:35  rowbed  阅读(8)  评论(0编辑  收藏  举报