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. poj 1001 求高精度幂(Java, BigDecimal, pow, hasNext, stripTrailingZeros, toPlainString)

    求高精度幂 Time Limit: 500MS   Memory Limit: 10000K Total Submissions: 180325   Accepted: 43460 Descripti ...

  2. opencv 2 Opencv数据结构与基本绘图

    基础图像容器Mat Mat 是一个类,又两个数据部分组成:矩阵头(包含矩阵尺寸,存储方法,存储地址等信息)和一个指向存储所有像素值的矩阵(根据所选存储方法不同,矩阵可以是不同的维数)的指针.矩阵头的尺 ...

  3. 指定vue的v-model的类型

    作为一个菜鸟,兼只会依葫芦画瓢的搬砖it狗,并没有系统学习过vue. 在最近项目中,发现了一个奇怪的问题: 使用vant-ui 的field <van-field v-model="f ...

  4. 读写分离很难吗?springboot结合aop简单就实现了

    目录 前言 环境部署 开始项目 注意 參考: 前言 入职新公司到现在也有一个月了,完成了手头的工作,前几天终于有时间研究下公司旧项目的代码.在研究代码的过程中,发现项目里用到了Spring Aop来实 ...

  5. beta week 1/2 Scrum立会报告+燃尽图 02

    此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9912 一.小组情况 队名:扛把子 组长:孙晓宇 组员:宋晓丽 梁梦瑶 韩昊 ...

  6. SpringMvc demo示例及源码详细分析

    三层架构介绍 我们的开发架构一般都是基于两种形式,一种C/S架构,也就是客户端/服务器,另一种是B/S架构,也就是浏览器/服务器.在JavaEE开发中,几乎全部都是基于B/S架构的开发.那么在B/S架 ...

  7. html基础——div/span

    div是一个块标签/盒子标签,单独占据一行 span不会占据一块,一般是用来修改某几个文字的格式 比如一行字,需要将每一句的首字母大写,就可以使用span标签 如果是要将一个段落的字加样式,两个都可以 ...

  8. sortColors

    Given an array with n objects colored red, white or blue, sort them in-place so that objects of the ...

  9. react修改端口

    react修改端口 在react官网根据文档安装好项目之后,发现新项目没有了scripst文件夹 之前版本是在scripts文件夹中的starts.js中修改 新版本修改port发现移入到了依赖里面 ...

  10. Python内置类属性,元类研究

    Python内置类属性 我觉得一切都是对象,对象和元类对象,类对象其实都是一样的,我在最后进行了证明,但是只能证明一半,最后由于元类的父类是type,他可以阻挡对object属性的访问,告终 __di ...