首页 > 其他分享 >2023.04.06 - vue组件中动态指定监听的值

2023.04.06 - vue组件中动态指定监听的值

时间:2023-04-06 17:12:41浏览次数:63  
标签:摄像 vue 06 val unwatch 2023.04 watch choosewatch 监听

业务场景:高拍仪给出的视频信息API回调里会不断返回图像数据。因为有主副摄像图像信息,并且两个图像信息会二选一展示在DOM容器里。所以就是二对一的关系。

// 主摄像数据
let priPic:string = '';
// 副摄像数据
let subPic:string = '';
// 展示在容器的数据 = 主摄像数据||副摄像数据;
let showPic:string = '';
// 镜头
let lens:'主' | '副'= '主';

我的思路是,通过监听lens指定镜头的状态后,将选择的镜头数据不断进行赋值操作给showPic

这就意味着,主摄像和副摄像的数据我只要监听一条就可以实现了,多出来的监听就是冗余代码。

所以我想到了 动态制定监听对象的方法,并作了实现,下面是核心代码:

<script>
  watcher() {
    // 如过有监听,就注销
    if (this.unwatch) this.unwatch();
    // 没有制定监听的变量名,直接return
    if (!this.choosewatch) return;
    //vm.$watch 返回一个取消观察函数,用来停止触发回调:
    this.unwatch = this.$watch(this.choosewatch, (val) => {
      //TODO Someting:callback
      this.watchdata = `${this.choosewatch}: ${val}`;
    });
  }
</script>

相关实现方法参考vm-watch

完整案例

<template>
	<div id="app">
		<label for="pet-select">Choose a watch:</label>

		<select v-model="choosewatch" name="pets" id="pet-select">
			<option value="">--Please choose an option--</option>
			<option v-for="watch in watchList" :value="watch" :key="watch">{{ watch }}</option>
		</select>
		<p>
			监听watch1
			<input type="text" v-model="watch1" />
			<button
				@click="
					() => {
						watch1 = '';
					}
				"
			>
				清空
			</button>
		</p>
		<p>
			监听watch2
			<input type="text" v-model="watch2" />
			<button
				@click="
					() => {
						watch2 = '';
					}
				"
			>
				清空
			</button>
		</p>
		<p>{{ watchdata || 'watch:暂无数据' }}</p>

		<p>{{ choosewatchdata || 'choosewatch:暂无选择' }}</p>
	</div>
</template>

<script>
export default {
	data() {
		return {
			// 选择监听的属性
			choosewatch: '',
			// 监听的属性
			watch1: '',
			watch2: '',
			watchList: ['watch1', 'watch2'],
			// 监听的属性值
			watchdata: '',
			// 选择监听的属性值
			choosewatchdata: ''
		};
	},
	methods: {
		watcher() {
			if (this.unwatch) this.unwatch();
			if (!this.choosewatch) return;
			this.unwatch = this.$watch(this.choosewatch, (val) => {
				this.watchdata = `${this.choosewatch}: ${val}`;
			});
		}
	},
	watch: {
		choosewatch(val) {
			this.choosewatchdata = `choosewatch: ${val}`;
			this.watcher();
		}
	}
};
</script>

标签:摄像,vue,06,val,unwatch,2023.04,watch,choosewatch,监听
From: https://www.cnblogs.com/yehuda/p/17293411.html

相关文章

  • vue 上传大型文件插件(vue上传视频插件)
    ​IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。 一. 两个必要响应头Accept-Ranges、ETag        客户端每次提交下载请求时,服务端都要添加这两个响应头,以保证客户端和服务端将此下载识别为可以断点续传......
  • vue3 watch 监听 flush post 作用?
    副作用刷新时机Vue的响应性系统会缓存副作用函数,并异步地刷新它们,这样可以避免同一个“tick”中多个状态改变导致的不必要的重复调用。同一个“tick”的意思是,Vue的内部机制会以最科学的计算规则将视图刷新请求合并成一个一个的"tick",每个“tick”刷新一次视图,比如a=1;b=2;只会......
  • vue.config.js 配置
    const{defineConfig}=require('@vue/cli-service')  //按需引入  //constAutoImport=require('');constAutoImport=require('unplugin-auto-import/webpack')constComponents=require('unplugin-vue-components/webpac......
  • vue前端实现上传文件,vue 上传文件
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......
  • Rabbit-分布式事务实例 20230406
     一、生产、消费者流程        1、生产者(下单后生产务必成功)派单队列:order_platonn_queue交换机:order_exchange_name绑交换机路由键:orderRoutingKey生产者=>采用confirm,确认应答机制Ack模式:成功......
  • vue第八课:axios库的使用
    axios功能强大的网络请求库。<scriptsrc="https://unpkg.com/axios/dist/axios.min.js"></script>基础使用:axios.get(地址?key=value&key2=values).then(function(response){},function(err){})axios.get(地址,{key:value,key2:value2}).then(function(response......
  • vue3中 toRefs和 toRef 的区别
    toRefs是为了避免对一个响应式对象解构的时候,解构后的每个属性不具有响应性toRef是为了针对单独获取某个对象的属性的时候保持响应性,从而单独对某个对象的属性进行响应式转化针对reactive或者ref创建的响应式对象都可以使用这两个api进行转化注意:toRefs只能对第一层......
  • vue3中路由错误自动跳转404页面 路由表写法
    定义路由表import{createRouter,createWebHashHistory}from"vue-router";constroutes=[ { path:"/", name:"home", component:Home, },//... { path:"/404", name:"404", component:()=&......
  • vue 手写分页
       data:{        crossing_status:CROSSING_STATUS,        crossing_list:[],        time:null,        log:{          page:1,          pages:......
  • 20230406 英语学习进度慢
    我从2月中开始,一直在做精听的练习.但是,你关于精听的进度,你认为太慢了.你的听力加起来,不至5篇,这个量,我认为是严重不足地.正如大佬所言,20篇以上的精听&英转中的完全掌握,将会有英语的极大提升.一方面,精听的确需要大量的时间投入.但是,另外一方面,你的确时间投入需要加......