Vue2.0 watch监听

watch监听数据的变化执行回调函数

值类型的数据监听(字符串、数字、布尔、undefined—)

<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8">
	<title></title>
	<script src="../js/vue.js"></script>
</head>

<body>
	<div id="app">
		<h1>watch监听</h1>
		<button @click="num++">{{num}}</button>
	</div>
	<script>
		new Vue({
			el: "#app",
			data() {
				return {
					num: 5
				}
			},
			watch: {
				// 值类型的数据监听(字符串、数字、布尔、undefined—)
				"num": {
					handler(nval, oval) {
						console.log("数据num", oval, "变化为", nval)
					}
				}

			},
			// 监听num数据的变化,执行回调函数handler
		})

	</script>
</body>

</html>

watch监听   引用类型  需要添加deep选项  

案例  简单的加减乘除运算

<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8">
	<title></title>
	<script src="../js/vue.js"></script>
</head>

<body>
	<div id="app">
		<h1>Watch监听</h1>
		<input type="text" v-model.number="obj.pre">
		<select name="" id="" v-model="obj.type">
			<option value="+">+</option>
			<option value="-">-</option>
			<option value="*">×</option>
			<option value="/">÷</option>
		</select>
		<input type="text" v-model.number="obj.next">
		=
		{{obj.result}}
	</div>


	<script>
		new Vue({
			el: "#app",
			data() {
				return {
					obj: {
						pre: 1,
						next: 1,
						type: "+",
						result: 2
					}
				}
			},
			watch: {
				"obj": {
					// 引用类型数据监听需要添加deep选项
					// oval和nval都是最新的值
					handler(nval, oval) {
						// console.log("数据发生变化",nval,oval);
						// 只要obj发生变化重新计算result的值
                        // eval将字符串转化为数字  强大且危险
						this.obj.result = eval(`(${this.obj.pre})${this.obj.type}(${this.obj.next})`);
					},
					deep: true,
				}
			},

		})
	</script>
</body>

</html>

案例 watch监听引用类型+本地存储 todolist


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="../js/vue.js"></script>
	</head>
	<body>
		<div id="app">
			<input type="text" @keyup.enter="addItem">
			<!-- 遍历数据list -->
			<h3>未完成{{undolist.length}}</h3>
			<div v-for="item in undolist" :key="item.title">
				<input type="checkbox" v-model="item.done">
				<span>{{item.title}}</span>
				<button @click="delItem(item)">x</button>
			</div>
			<h3>已经完成{{donelist.length}}</h3>
			<div v-for="item in donelist" :key="item.title">
				<input type="checkbox" v-model="item.done">
				<span>{{item.title}}</span>
				<button @click="delItem(item)">x</button>
			</div>
		</div>
		<script>
			new Vue({
				el:"#app",
				computed:{
					// 通过计算list算出undolist没有完成的列表
					undolist(){
						// 通过list过滤 返回item.done值为false的所有元素
						return this.list.filter(item=>!item.done);
					},
					donelist(){
						// 返回保留item.done值为true的元素
						return this.list.filter(item=>item.done);
					}
				},
				methods:{
					// 删除元素
					delItem(item){
						// 查找item在list的下标
						var ind = this.list.indexOf(item);
						// 进行删除
						this.list.splice(ind,1);
					},
					// 添加元素
					addItem(e){
						// e.target输入的文本框
						// e.target.value 文本框的值
						this.list.unshift({done:false,title:e.target.value})
						// 清空文本框的内容
						e.target.value = "";
					}
				},
				data(){
					return {
						// list:[
						// 	{done:true,title:"学习html"}
						// ]
						list: JSON.parse(localStorage.getItem("list") || "[]")
					}
				},
				watch:{
					"list":{
						handler(){
							localStorage.setItem("todo",JSON.stringify(this.list));
						},
						deep:true
					}
				}
				
			})
			// 目标:1 在文本框输入文字,按回车,文字添加到list里面
			// 目标:2 单击x 删除当前行
			// unshift在数组的前面添加一个元素
			// splice(n,m,j) 从第n个删除m个,添加j
			// indexOf(item) 查找item在列表的下标
		</script>
		 
	</body>
</html>

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3中,可以使用`watch`函数来监听本地存储的值的变化。首先,在组件的`setup`函数中引入`watch`函数,并在需要监听的变量上使用`watch`函数进行监听。具体代码如下所示: ```javascript import { watch } from 'vue' // 在需要监听本地存储的组件中 export default { setup() { watch(() => localStorage.getItem('key'), (newVal, oldVal) => { // 执行相应的刷新或修改操作 console.log('监听', newVal) }) } } ``` 在上述代码中,我们使用`watch`函数来监听`localStorage.getItem('key')`的变化。当存储的值发生变化时,会执行回调函数并传入新值和旧值作为参数,你可以在回调函数中执行相应的刷新或修改操作。这样,当本地存储的值发生改变时,页面就会相应地进行刷新或修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [vue动态监听本地存储的值](https://blog.csdn.net/scarlett1017/article/details/125126925)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Vue2.0 V1.1版本 增删改查功能,全选单选与取消全选选项,使用localStorage本地存储数据和watch深度监听](https://download.csdn.net/download/weixin_47606392/85931071)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值