当前位置: 首页 > news >正文

网站开发建设类合同网址链接生成器

网站开发建设类合同,网址链接生成器,加盟网站推广,长春企业做网站31. Vue侦听器Watch 1. 定义 Watch是Vue.js提供的一个观察者模式,用于监听数据的变化并执行相应的回调函数。虽然计算属性Computed在大多数情况下更合适,但有时也需要一个自定义的侦听器Watch。因为在有些情况下,我们需要在状态变化时执行一…

31. Vue侦听器Watch

1. 定义

WatchVue.js提供的一个观察者模式,用于监听数据的变化并执行相应的回调函数。虽然计算属性Computed在大多数情况下更合适,但有时也需要一个自定义的侦听器Watch。因为在有些情况下,我们需要在状态变化时执行一些“副作用”:例如更改 DOM,或是根据异步操作的结果去修改另一处的状态。

2. 基本用法

在Vue组件中,我们可以使用watch来监听数据的变化并执行回调函数,示例如下:

<template><div><div><label for="qu">问题: </label><input type="text" id="qu" placeholder="请输入问题" v-model="question"></div><div>{{ answer }}</div></div>
</template>
<!-- vue2 -->
<script>
import axios from "axios"
export default {data() {return {question: '',answer: "no answer"}},watch:{question(newValue, oldValue) {this.answer = "Thinking..."this.debounceGet()}},  created() {// 接收防抖获取数据函数this.debounceGet = this.debounce(this.getAnswer, 500)},  methods:{// 调用接口获取数据async getAnswer() {try{const res = await axios.get('https://yesno.wtf/api')this.answer = await res.data.answer} catch(error) {this.answer = error}},// 防抖函数控制debounce(fn, wait) {let timer = nullreturn function() {if(timer)clearTimeout(timer)timer = setTimeout(() => {fn.apply(this, arguments)}, wait);}}}
}
</script><!-- vue3 -->
<script setup>
import axios from "axios"
import { ref, watch } from "vue"const question = ref("")
const answer = ref("no answer")// 异步获取数据
const getAnswer = async() => {try{const res = await axios.get('https://yesno.wtf/api')answer.value = await res.data.answer} catch(error) {answer.value = error}
}
// 防抖函数
const debounce = (fn, wait) => {let timer = nullreturn function() {if(timer)clearTimeout(timer)timer = setTimeout(() => {fn.apply(this, arguments)}, wait);}
}
// 接收防抖获取数据函数
const debounceGet = debounce(getAnswer, 500)// 侦听器
watch(question, (newValue, oldValue) => {answer.value = "Thinking..."debounceGet()
})
</script>

3. watch高级用法

watch侦听器还有三个属性:

  • handlerwatch中需要具体执行的方法。
  • immediate:在组件初始化时立即执行hanler中代码。
  • deep:深度监听,可以监听对象或数组内部属性的变化。
<!-- vue2 -->
<script>
export default {data() {return {obj: {name: "Jack",age: 20}}},watch:{obj: {handler(newValue, oldValue){console.log("obj被改变");},immediate: true,deep: true}},methods:{setName(){this.obj.name = "Jarry"}}
}
</script>

在vue3中,直接给 watch() 传入一个响应式对象,会隐式地创建一个深层侦听器——该回调函数在所有嵌套的变更时都会被触发:

// vue3
const obj = reactive({name: "Jack",age: 20
})
const setName = () => {obj.name = "Bob"
}
//直接传入响应式对象,所有子孙元素改变都会侦听到,默认深度监听
watch(obj, (newValue, oldValue) => {console.log("obj被改变");
})
//传入一个getter函数,只会侦听到对应的属性的变化,默认深度监听
watch(() => obj.name, (newValue, oldValue) => {console.log("obj.name被改变");
})
// 传入deep属性,强制监听
watch(() => obj.age, (newValue, oldValue) => {console.log("obj.age被改变");
}, { deep: true })setName();//obj被改变
obj.age++

watch 默认是懒执行的:仅当数据源变化时,才会执行回调。但在某些场景中,我们希望在创建侦听器时,立即执行一遍回调。举例来说,我们想请求一些初始数据,然后在相关状态更改时重新请求数据。

我们可以通过传入 immediate: true 选项来强制侦听器的回调立即执行:

// 传入immediate, 立即执行
watch(obj, (newValue, oldValue) => {console.log("立即执行");
}, { immediate: true })
http://www.ds6.com.cn/news/61536.html

相关文章:

  • 柳州网站制作公司免费发seo外链平台
  • 网站建设的步骤是什么从哪里找网络推广公司
  • 网站搭建平台有哪些深圳谷歌推广公司
  • 成人本科报考条件及要求百度seo优化怎么做
  • 三室两厅两卫装修实景广州网页seo排名
  • 广州白云区网站建设百度排名推广
  • 小程序代理是做什么的seo免费入门教程
  • html5浅蓝色网站设计公司dede模板网站优化方法
  • 外贸商城网站app开发费用
  • 网页游戏排行大全seo专业优化公司
  • it 网站模板日照高端网站建设
  • 有没有一个网站做黄油视频百度网址输入
  • 九网互联怎么建设网站网站首页制作网站
  • 有域名了网站怎么建设sem竞价推广是什么意思
  • 海拉尔做自己的网站帮平台做推广怎么赚钱
  • 网站开发亿玛酷出名5最佳的资源搜索引擎
  • 临颖网站建设爱站seo
  • 福田做网站多少钱男生短期培训就业
  • 怎样网站建设与管理网店推广的作用
  • 自己电脑做网站 带宽seo课培训
  • 做网站公司郑州郑州的网站建设公司排名如何做好网络推广
  • 私人兼职做网站开发长沙网站提升排名
  • 各种类型网站建设口碑好百度推广个人能开户吗
  • 武汉网站维护怎么做互联网推广
  • 做web网站原型设计推广网站模板
  • 中国建设银行官方网站纪念币一个产品的网络营销方案
  • 英文垃圾站的利器几款wordpress自动采集插件宁波网站推广排名
  • 蚂蚁分类信息网站建设站长平台工具
  • 齐齐哈尔市网站建设百度电脑版下载官方
  • 广告营销策划方案模板湖南专业关键词优化