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 ...
随机推荐
- 2018年12月份GitHub上最热门的Java开源项目
来自:开源最前线(ID:OpenSourceTop) 链接:https://www.itcodemonkey.com/article/12747.html 又到了公布 GitHub 上热门项目的时候啦 ...
- 在GridControl控件上绑定图片的几种操作方式
我们知道,基于DevExpress的开发Winform的项目界面的时候,GridControl控件是经常用来绑定数据的,一般以常规的字符内容为主,有时候也会有图片的显示需要,那么如果显示图片,我们应该 ...
- 2小时学会Spring Boot(IDE:eclipse)
一:安装STS插件 官网下载:点此下载STS 注意:STS版本必须与eclipse版本对应 安装教程:http://blog.csdn.net/cryhelyxx/article/details/53 ...
- 重构JS代码 - 让JS代码平面化
js中的嵌套函数用的很多,很牛叉,那为何要平面化? 易懂(自己及他人) 易修改(自己及他人) 平时Ajax调用写法(基于jQuery) $.post('url', jsonObj, function ...
- flask 更新数据库
在做项目的过程中,我们都遇到过,经常需要修改我们数据库的字段,在flask中,是通过ORM(对象关系映射)来创建数据库的,表--->model class,字段---->属性 在flask ...
- dynamo与cassandra区别
虽说cassandra是dynamo的开源版本,但两者还是有很大区别的. coordinator的选取: 在dynamo论文中,一般是preference list中N个副本的第一个 为什么叫“一般” ...
- beego 自定义控制器与路由
框架浅析 这是之前使用bee创建的webapp目录层级结构: ├── conf 配置文件 │ └── app.conf ├── controllers 控制器 │ └── default.go ├── ...
- CMMI摘要
CMMI_百度百科https://baike.baidu.com/item/CMMI CMMI分为哪几个等级?CMMI等级介绍_百度经验https://jingyan.baidu.com/articl ...
- Azure系列2.1.15 —— SharedAccessBlobPolicy
(小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...
- [转帖]Gartner预测:2019年全球公有云规模达2143亿美元
Gartner预测:2019年全球公有云规模达2143亿美元 https://news.cnblogs.com/n/623341/ 近日,全球领先的信息技术研究和顾问公司 Gartner 发布的最新数 ...