Vue3-Demo实例

watch(监听器)

定义一个方法接收一个监听器,方法中第一个参数是需要监听的数据,可以是一个ref定义的数据、reactive定义的数据,函数返回一个值,一个包含上述内容的数组。第二个参数是一个箭头函数,箭头函数内部可以写具体执行的方法。后面还有很多参数,比如:immediate(初始化调用一次)、deep(深度监听)。
解除监视:在方法中调用监听器既可,如下代码所示。
情况一:监视ref定义的【对象类型】数据:直接写数据名,监视的是对象的【地址值】,若想监视对象内部的数据,要手动开启深度监视。

<template>
  <div class="person">
    <h2>姓名:{{ person.name }}</h2>
    <h2>年龄:{{ person.age }}</h2>
    <button @click="changeName">修改名字</button>
    <button @click="changeAge">修改年龄</button>
    <button @click="changePerson">修改整个人</button>
  </div>
</template>

<script setup lang="ts">
import { ref, watch } from "vue";
let person = ref({
  name: "张三",
  age: 8,
});

function changeName() {
  person.value.name += "~";
}
function changeAge() {
  person.value.age += 1;
}
function changePerson() {
  person.value = { name: "李四", age: 60 };
}

const uu = watch(
  person,
  (value, old) => {
    console.log(value, old);
    if (value.age > 63) {
      console.log(11);
      uu();
    }
  },
  { deep: true }
);
</script>
</script>

情况二:监视ref或reactive定义的【对象类型】数据中的某个属性,注意点如下:1.若该属性值不是【对象类型】,需要写成函数形式。2.若该属性值是依然是【对象类型】,可直接编,也可写成函数,建议写成函数。

<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 setup lang="ts">
import { reactive, watch } from "vue";
let person = reactive({
  name: "张三",
  age: 8,
  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: "雅迪" };
}
// 监视reactive对象中某个属性,且该属性是基本类型。写成getter函数式。否则无效监视元。
watch(() => person.name,(value, old) => {
    console.log(value, old);
  }
);

// 监视reactive对象中某个对象,写成getter函数式,这样可以监听整个对象改变。
// 注意:如果对象中某个属性改变时也需要监听,需要加上 {deep:true} 深度监听。
watch(() => person.car,(value, old) => {
    console.log(value, old);
  },{ deep: true }
);
</script>

watchEffect(监听器)

官网:立即运行一个函数,同时响应式地追踪其依赖,并在依赖更改时重新执行该函数。
watche对比wacthEffect

 - 都能监听响应式数据的变化,不同的是监听数据变化的方式不同。
 - watche:要明确指出监视的数据。
 - watchEffect:不需要明确指出监视的数据(函数中用到什么响应式属性就监视那些属性)
<template>
  <div class="person">
    <h2>需求:当水温达到60℃,或作水位达到80cm时,给服务器发送请求。</h2>
    <h2>当前水温:{{ temp }}</h2>
    <h2>当前水位:{{ height }}cm</h2>
    <button @click="changeTemp">点击水温+10</button>
    <button @click="changeHeight">点击水位+10</button>
  </div>
</template>

<script setup lang="ts">
import { ref, watchEffect } from "vue";
let temp = ref(10);
let height = ref(0);
function changeTemp() {
  temp.value += 10;
}
function changeHeight() {
  height.value += 10;
}
watchEffect(() => {
  if (temp.value > 60 || height.value > 70) {
    console.log("向服务器发送请求!");
  }
});
</script>
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue是一种用于构建用户界面的渐进式JavaScript框架,它可以帮助开发者更高效地构建单页面应用程序。而vue-better-scroll是基于Vue的一款优秀的滚动插件,它能够实现更流畅的滚动效果,并且支持上下左右的滚动和联动效果。 如果需要实现左右侧菜单的联动效果,我们可以通过使用vue-better-scroll的scrollToElement方法来实现。首先,我们需要在Vue中引入vue-better-scroll插件并进行配置。 在Vue实例的data中,我们可以定义左右两个菜单的数据,例如leftMenu和rightMenu,并在created生命周期中初始化数据。然后,在mounted生命周期中,我们可以通过refs属性获取到两个菜单容器的DOM元素。 接下来,我们需要监听左边菜单的点击事件,当点击左边菜单的某个选项时,我们可以通过调用vue-better-scroll的scrollToElement方法,将右边菜单滚动到对应的位置。通过传递目标元素的选择器或具体的DOM元素,我们可以实现左右菜单的联动效果。 具体实现时,我们可以在左边菜单的点击事件中,使用this.$refs来访问右边菜单容器,并调用scrollToElement方法,将目标元素滚动到可视区域。通过传递选择器或具体DOM元素作为参数,我们可以精确控制滚动的位置。 同时,为了视觉上更好的效果,我们还可以给目标元素添加样式,如高亮当前选中项,以提升用户体验。 最后,通过一系列的事件处理和样式设置,我们就可以实现左右侧菜单的联动demo了。 以上就是使用Vuevue-better-scroll实现左右侧菜单联动demo的大致思路和步骤。通过合理运用这两个工具,我们可以轻松地实现出一个流畅、友好的用户界面效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值