vue 组件传递值以及获取DOM元素的位置信息
1.父组件 select_li.vue
1.1 父组件模板
<template>
<div id='selectLi' ref="selectLi">
<div class="sort" @click="choose">
<span>{{name}}</span>
<img class="icon_arrow" :src="src">
</div>
<mask_li v-bind:showMaskBox="showMaskBox" :lists="lists" @closeChild="updataMaskStatus"></mask_li>
</div>
</template>
1.2 父组件js
<script>
import ElementUI from 'element-ui'
import mask_li from './mask_li.vue' // 导入子组件
export default({
data(){
return{
name:'筛选',
src: require('../../../../../assets/images/icon_arrow_1.png'), // 引入图片资源
showMaskBox:false,
toTop:0,
lists:[
{
name:'电子知情',
},
{
name:'筛选入组',
}
]
}
},
components: {
mask_li // 申明子组件
},
methods:{
choose:choose,
updataMaskStatus:updataMaskStatus
},
mounted(){
console.log(this.$refs.selectLi.getBoundingClientRect())
// 在节点挂载之后,获取dom元素
this.toTop = this.$refs.selectLi.getBoundingClientRect().top
}
}) function choose () {
this.showMaskBox=!this.showMaskBox;
}
function updataMaskStatus (data) {
this.showMaskBox = data
} </script>
2.子组件 mask_li.vue
<template>
<div id='maskLi' v-show="showMask">
{{showMask}}
<div class="mask" @click="closeMaskLi"></div>
<ul class="choose_box">
<li class="online" :class="{'active':showOn===key}" v-for="(list,key) in lists" :key="key" @click="chooseCurrent(key)"><span>{{list.name}}</span><span v-show="showOn===key">√</span></li>
</ul>
</div>
</template>
<script>
export default ({
props: [
'showMaskBox', // 使用props接收父组件传来的 showMaskBox 以及lists
'lists'
],
data(){
return{
showOn:0,
showMask:false
}
},
methods:{
chooseCurrent:chooseCurrent, // 为循环的列表添加点击事件---点击这个改变样式
closeMaskLi:closeMaskLi // 关闭遮罩层,并向父组件传值,更改父组件传递的showMaskBox的值
},
watch: {
// 如果 `showMaskBox` 发生改变,这个函数就会运行
showMaskBox: function () {
this.showMask = this.showMaskBox
}
}
}) function chooseCurrent (index) {
this.showOn = index;
}
function closeMaskLi () {
this.showMask = false;
// closeChild是在父组件on监听的方法
// 第二个参数this.showMask是需要传的值
this.$emit('closeChild', this.showMask)
}
</script>
3. 获取dom元素的位置信息
this.$refs['通过设置ref获取到的dom元素'].getBoundingClientRect();
//示例: 获取元素距离顶部的距离
1 this.$refs.selectLi.getBoundingClientRect().top
3.1 父组件给子组件传值
在父组件中:使用绑定属性的方式将要传递的值传递给子组件
<template>
<div>
<input type='text' />
<mask_li v-bind:showMaskBox="showMaskBox" :lists="lists" @closeChild="updataMaskStatus"></mask_li>
</div>
</tempate>
在子组件中:使用props接收父组件传来的值。详细见2中js部分
3.2子组件给父组件传值
在子组件中给父组件
在点击 div.mask 的时候,调用closeMaskLi() 函数,定义一个事件--closeChild,并传一个值--this.showMask;父组件在监听closeChild事件后执行相应操作--更新传给子组件的showMaskBox值;
<template>
<div id='maskLi' v-show="showMask">
{{showMask}}
<div class="mask" @click="closeMaskLi"></div>
<ul class="choose_box">
<li class="online" :class="{'active':showOn===key}" v-for="(list,key) in lists" :key="key" @click="chooseCurrent(key)"><span>{{list.name}}</span><span v-show="showOn===key">√</span></li>
</ul>
</div>
</template>
有关页面传值,参考 Vue2.0的三种常用传值方式、父传子、子传父、非父子组件传值
vue 组件传递值以及获取DOM元素的位置信息的更多相关文章
- 第六章 组件 67 使用ref获取DOM元素和组件引用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- vue 使用ref获取DOM元素和组件引用
在vue中可以通过ref获取dom元素,并操作它,还可以获取组件里面的数据和方法. HTML部分: <div id="app"> <input type=&quo ...
- (四)Jsoup 获取 DOM 元素属性值
第一节: Jsoup 获取 DOM 元素属性值 Jsoup获取DOM元素属性值 比如我们要获取博客的href属性值: 我们这时候就要用到Jsoup来获取属性的值 : 我们给下示例代码: package ...
- Vue系列之 => ref获取DOM元素和组件
可以获取DOM元素,和组件中的数据,方法 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- 20.Vue中获取DOM元素和组件
1.获取DOM元素和组件:this.$refs
- vue获取dom元素内容
通过ref来获取dom元素 在vue官网上对ref的解释 ref 被用来给元素或子组件注册引用信息.引用信息将会注册在父组件的 $refs 对象上.如果在普通的 DOM 元素上使用,引用指向的就是 D ...
- vue(4)—— vue的过滤器,监听属性,生命周期函数,获取DOM元素
过滤器 vue允许自定义过滤器,我个人认为,过滤器有两种,一种是对数据的清洗过滤,一种是对数据切换的动画过滤 数据切换的动画过滤 这里还是利用前面的动态组件的例子: 这里由于没办法展示动画效果,代码如 ...
- Vue自定义指令获取DOM元素
我们知道,Vue.js的核心是数据驱动,当数据有所变化时,DOM就会被更新,比如: <span v-text="msg"></span> export de ...
- vue获取dom元素注意问题
mounted(){ setTimeout(()=>{ this.contentToggle(); },1000) }, methods:{ contentToggle(){ console.l ...
随机推荐
- keypress 和 blur 事件冲突的问题
需求:点击需求:点击添加标签,出来input框,内容输入完成后点击enter键和blur时都可以执行提交标签的效果,提交时对内容进行判断,执行完成后清除input内的内容.如下图 问题:内容输入完成后 ...
- python进程与线程的操作
进程操作: # project :Python_Script # -*- coding = UTF-8 -*- # Autohr :XingHeYang # File :processTest.py ...
- 【Linux系列】Centos 7安装 Nginx(三)
目的 为了下面的Laravel部署,本篇开始安装Nignx服务器. 防火墙设置 在物理主机上查看nginx是否安装成功,需要开放虚拟机的80端口. 用cmder登录到虚拟机 firewall-cmd ...
- PHP变量的初始化以及赋值方式介绍
什么是变量 变量通俗的来说是一种容器.根据变量类型不同,容器的大小不一样,自然能存放的数据大小也不相同.在变量中存放的数据,我们称之为变量值. PHP 中的变量用一个美元符号后面跟变量名来表示.变量名 ...
- 在idea中使用git
在idea中使用git 1. 在idea中配置git 安装好IntelliJ IDEA后,如果Git安装在默认路径下,那么idea会自动找到git的位置,如果更改了Git的安装位置则需要手动配置下 ...
- 网络爬虫一定要用代理IP吗
数据采集现在已经成为大数据时代不可以缺少的一部分,在数据采集过程中,很多人都会用到代理ip,那么网络爬虫一定要用代理IP吗?答案虽然不是肯定的,但出现以下情况一定是需要用到代理IP的.1.在爬虫的时候 ...
- python爬虫项目-一见倾心壁纸
方法1 import re import urllib import urllib.request def getHtml(url): page = urllib.request.urlopen(ur ...
- sublime插件开发教程2
直接进入正题 先新建个chajian.py python写起 import sublime import sublime_plugin class ExampleCommand(sublime_plu ...
- 2019/12/1 智能硬件实验室(ROS方向)
浅谈安装ubuntu与ros感想 ubuntu 以前看电脑软件安装管家上的教程尝试在另一台电脑上安装ubuntu(虚拟机上),但是后面遇到了无法解决的问题,放弃了.这次因为选的ros方向,所以昨天在学 ...
- C#异步案例一则
场景 生产者和消费者队列, 生产者有多个, 消费者也有多个, 生产到消费需要异步. 下面用一个Asp.NetCore Web-API项目来模拟 创建两个API, 一个Get(), 一个Set(), G ...