Vue获取dom和数据监听
Vue获取dom对象
在js和jq中我们都能获取dom对象例如
// 获取id=1的div标签
<div id=d1>dom对象</div>
// js语法
let ele = document.getElementById('d1')
// jq语法
let ele = $('#d1')
那么在vue中也有实现该功能的语法,使用方法,在vue组件中,给目标标签添加上ref属性,然后在vue组件实例中调用方法去获取dom对象:
<body>
<div id='app'>
// 给目标标签添加上ref属性并赋值
<div ref='mydiv'></div>
// 给按钮绑定点击事件触发myclick函数
<button @click='myclick'>点我给div添加内容</button >
</div>
// script部分
<script>
//创建一个Vue对象
const app = new Vue(
{
// 找到组件作用域
el:'#app',
methods:{
myclick:function(){
// this.$refs.目标标签ref的属性值就能找到dom对象
let ele = this.$refs.mydiv;
// 给dom对象添加文本内容
ele.innerText='kingfan';
}
}
}
)
</script>
</body>
这样在点击button按钮后就执行myclick对应的函数,this.$refs.目标标签ref的属性值就能找到dom对象,然后利用原生的js语法就可以对目标标签进行操作
Vue 数据监听
在vue中数据监听(watch)是指在监听数据发生变化时会触发相应的监听函数,但监听的数据类型不同会有不同的现象值得我们去注意。
我们现在拿字符串、对象、数组这三个数据类型去举例:
监听字符串
<body>
<div id='app'>
// h1引用组件name数据
<div><h1 v-text="name"></h1></div>
// 按钮点击事件绑定vue方法
<button @click="myclick">点我</button>
</div>
<script>
//创建一个Vue对象
const app = new Vue(
{
el:'#app',
data:{
name:'kingfan',
},
methods:{
myclick:function () {
this.name='fanking';
}
},
// 监听对象,接受data字段为监听对象,handler在监听对象变化后执行函数
watch: {
name:{
handler:function (val,oldval) {
// function接受两个参数
console.log('修改后',val,'修改前',oldval);
}
}
}
}
)
</script>
</body>
现象:在点击按钮之前页面显示king,点击之后显示fanking,并看到console.log('修改后',val,'修改前',oldval)打印修改前后的数值,说明vue能监听到字符串的变化

监听数组
<body>
<div id='app'>
{{hobby}}
<button @click="myclick">点我</button>
</div>
<script>
//创建一个Vue对象
const app = new Vue(
{
el:'#app',
data:{
hobby:['吃饭','睡觉','撸代码']
},
methods:{
myclick:function () {
this.hobby.push('打游戏');
}
},
watch: {
hobby:{
handler:function (val,oldval) {
console.log('修改后',val,'修改前',oldval);
}
}
}
}
)
</script>
</body>

可以看到监听到了数组的长度的变化,但是打印出来的前后值为什么是相同的呢?,这个和python中列表是可变数据类型的原理一样
监听数组元素修改
<body>
<div id='app'>
{{hobby}}
<button @click="myclick">点我</button>
</div>
<script>
//创建一个Vue对象
const app = new Vue(
{
el:'#app',
data:{
hobby:['吃饭','睡觉','撸代码']
},
methods:{
myclick:function () {
this.hobby.push('打游戏');
}
},
watch: {
hobby:{
handler:function (val,oldval) {
console.log('修改后',val,'修改前',oldval);
}
}
}
}
)
</script>
</body>

可以看到vue并不能监听到数组的元素变化。这是我们就用到另外的方法修改数组元素:
this.$set(this.hobby,0,'打游戏');
//或者
Vue.set(this.hobby,0,'打游戏')
监听对象
监听对象就不做详细演示了,只要知道只能监听到对象value的变化,而不能监听到对象key的增加
这时增加和删除key要用到:
// 增加
this.$set(this.obj,key,value);
// 删除
Vue.delete(this.obj,key)
Vue获取dom和数据监听的更多相关文章
- Blazor和Vue对比学习(基础1.8):Blazor中实现计算属性和数据监听
1.7章<传递UI片断>,需要做几个案例,这部分暂停消化几天.我们先把基础部分相对简单的最后两章学习了. 计算属性和数据监听是Vue当中的概念,本质上都是监听数据的变化,然后做出响应.两者 ...
- vue中的数据监听以及数据交互
现在我们来看一下vue中的数据监听事件$watch, js代码: new Vue({ el:"#div", data:{ arr:[,,] } }).$watch("ar ...
- vue 如何在循环中 "监听" 的绑定v-model数据
vue 如何在循环中 "监听" 的绑定v-model数据 阅读目录 vue 如何在循环中 "监听" 的绑定v-model数据 1. 普通属性的值进行监听 2. ...
- Vue之数据监听存在的问题
Vue之数据监听 当数据监听的是列表时,数据发生改变,不会被监听到. // 用$set修改数组中的数组能够被监听 // app.$set(this.hobby, 0, "爱你哦") ...
- 谈谈数据监听observable的实现
一.概述 数据监听实现上就是当数据变化时会通知我们的监听器去更新所有的订阅处理,如: var vm = new Observer({a:{b:{x:1,y:2}}}); vm.watch('a.b.x ...
- vue解惑之v-on(事件监听指令)
一.v-on指令 vue中用v-on指令来监听DOM事件,并触发相应的代码.比如v-on:click,表示监听了点击事件. 二.事件修饰符 在事件处理函数中调用 event.preventDefaul ...
- Vue3 为何使用 Proxy 实现数据监听
博客地址:https://ainyi.com/93 vue3 响应式数据放弃了 Object.defineProperty,而使用Proxy来代替它 我们知道,在 vue2 中,实现数据监听是使用Ob ...
- Python黑客编程基础3网络数据监听和过滤
网络数据监听和过滤 课程的实验环境如下: • 操作系统:kali Linux 2.0 • 编程工具:Wing IDE • Python版本:2.7.9 • 涉及 ...
- vue 定义全局函数,监听android返回键事件
vue 定义全局函数,监听android返回键事件 方法一:main.js 注入(1)在main.js中写入函数Vue.prototype.changeData = function (){ aler ...
随机推荐
- 跨语言调用Hangfire定时作业服务
跨语言调用Hangfire定时作业服务 背景 Hangfire允许您以非常简单但可靠的方式执行后台定时任务的工作.内置对任务的可视化操作.非常方便. 但令人遗憾的是普遍都是业务代码和hagnfire服 ...
- vscode 缩进改为2空格
因为vscode默认启用了"editor.detectIndentation": true”根据文件类型自动设置tabsize的选项. 在配置中加上 "editor.de ...
- 无线网络中信噪比(SNR)计算
信噪比(S/N)=log[信号功率密度/噪声功率密度] a =log[信号功率密度]-log[噪声功率密度] 例如,接收端的信号功率密度为-63dBm,噪声的信号功率密度为-95dBm,则: 信噪比( ...
- H5 65-清除浮动方式一
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- C++类的描述
类的描述分为两个部分,public和private public可以用来定义函数,对类的对象进行操作,对于用户是可见的,是用户对对象操作的唯一手段. private部分用于定义函数和数据成员,这些函数 ...
- 2018 Multi-University Training Contest 2
题目链接:2018 Multi-University Training Contest 2 6318 Swaps and Inversions 题意:sum=x*逆序个数+交换次数*y,使sum最小 ...
- 网工的Linux系统学习历程
偶遇篇作为一名通过思科CCNP认证的网络工程师,专注于网络技术.但在日常的工作中,难免不接触到服务器,对于大多数服务器来说,鉴于稳定性等因素的考虑,基本使用的都是Linux系统,包括RHEL.Cent ...
- 模拟银行ATM系统(基础版)
Account类 package ATM; public class Account {//定义Account类 private String accountID;//用于存储学生的用户账号(由八位数 ...
- BAT (中国互联网公司三巨头)
BAT,B=百度.A=阿里巴巴.T=腾讯,是中国互联网公司百度公司(Baidu).阿里巴巴集团(Alibaba).腾讯公司(Tencent)三大互联网公司首字母的缩写.百度总部在北京.阿里巴巴总部在浙 ...
- 【问题解决方案】之 关于某江加密视频swf专用播放器仍无法播放的问题
前言: 从pt上下载了一些语言学习的视频之后一直打不开,百度谷歌了若干种方法仍然无解.无奈放弃. 某日从百度知道里又看到一个方法,试了一下,居然灵了.呜呼哀哉.赶紧记下来. 原方法链接:https:/ ...