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元素的位置信息的更多相关文章

  1. 第六章 组件 67 使用ref获取DOM元素和组件引用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  2. vue 使用ref获取DOM元素和组件引用

    在vue中可以通过ref获取dom元素,并操作它,还可以获取组件里面的数据和方法. HTML部分: <div id="app"> <input type=&quo ...

  3. (四)Jsoup 获取 DOM 元素属性值

    第一节: Jsoup 获取 DOM 元素属性值 Jsoup获取DOM元素属性值 比如我们要获取博客的href属性值: 我们这时候就要用到Jsoup来获取属性的值 : 我们给下示例代码: package ...

  4. Vue系列之 => ref获取DOM元素和组件

    可以获取DOM元素,和组件中的数据,方法 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  5. 20.Vue中获取DOM元素和组件

    1.获取DOM元素和组件:this.$refs

  6. vue获取dom元素内容

    通过ref来获取dom元素 在vue官网上对ref的解释 ref 被用来给元素或子组件注册引用信息.引用信息将会注册在父组件的 $refs 对象上.如果在普通的 DOM 元素上使用,引用指向的就是 D ...

  7. vue(4)—— vue的过滤器,监听属性,生命周期函数,获取DOM元素

    过滤器 vue允许自定义过滤器,我个人认为,过滤器有两种,一种是对数据的清洗过滤,一种是对数据切换的动画过滤 数据切换的动画过滤 这里还是利用前面的动态组件的例子: 这里由于没办法展示动画效果,代码如 ...

  8. Vue自定义指令获取DOM元素

    我们知道,Vue.js的核心是数据驱动,当数据有所变化时,DOM就会被更新,比如: <span v-text="msg"></span> export de ...

  9. vue获取dom元素注意问题

    mounted(){ setTimeout(()=>{ this.contentToggle(); },1000) }, methods:{ contentToggle(){ console.l ...

随机推荐

  1. lqb 基础练习 特殊回文数

    基础练习 特殊回文数 时间限制:1.0s   内存限制:512.0MB     问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这样的五位和六位 ...

  2. Mirantis 收购 Docker | 云原生生态周报 Vol. 28

    作者 | 禅鸣.进超.心水.心贵 业界要闻 Docker 将 Docker Enterprise 卖给 Mirantis Mirantis 是一家扎根于 OpenStack 的云公司,最近专注于 Ku ...

  3. (线段树)A Corrupt Mayor's Performance Art

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5023 题意: 区间更新, 区间询问: 题解: 区间更新, 区间询问, 一共30种颜色, 可用int 来 ...

  4. 看淡生死,不服就干(C语言指针)

    看淡生死,不服就干 emmmmm 其实今天蛮烦的 高等数学考的一塌糊涂 会的不会的都没写 真心没有高中轻松了啊 也不知道自己立的flag还能不能实现 既然选择了就一定坚持下去啊 下面还是放一段之前写的 ...

  5. ubuntu 16.04源码编译OpenCV教程 | compile opencv on ubuntu 16.04

    本文首发于个人博客https://kezunlin.me/post/15f5c3e8/,欢迎阅读! compile opencv on ubuntu 16.04 Series Part 1: comp ...

  6. day 33 线程锁

    Python的GIL锁 - Python内置的一个全局解释器锁,锁的作用就是保证同一时刻一个进程中只有一个线程可以被cpu调度. 为什么有这把GIL锁? 答:Python语言的创始人在开发这门语言时, ...

  7. linux关闭不必要的用户

    #!/bin/bash for user in $( cat /etc/passwd | grep -v root | cut -d ":" -f 1 ) do str=(adm ...

  8. java多线程的wait、notify/notifyAll区别

    1.wait().notify/notifyAll() 方法是Object的本地final方法,无法被重写.   2.wait()使当前线程阻塞,前提是 必须先获得锁,一般配合synchronized ...

  9. createTextNode

    createTextNode()方法将创建一个包含给定文本的新文本文档节点.这个方法的返回值是一个指向新建文本节点的引用指针: reference = document.createTextNode( ...

  10. 单像空间后方交会(python实现)

    原理:空间后方交会是以单幅影像为基础,从该影像所覆盖地面范围内若干控制点的已知地面坐标和相应点的像坐标量测值出发,根据共线条件方程,解求该影像在航空摄影时刻的外方位元素Xs,Ys,Zs,φ,ω,κ. ...