ref 被用来给DOM元素或子组件注册引用信息。引用信息会根据父组件的 $refs 对象进行注册。如果在普通的DOM元素上使用,引用信息就是元素; 如果用在子组件上,引用信息就是组件实例

注意:只要想要在Vue中直接操作DOM元素,就必须用ref属性进行注册

实例:

这里为了在create的时候引用DOM元素,先在DOM中使用ref标签进行了注册,然后便可以通过’this.$refs’再跟注册时的名称来引用DOM元素了

第二部分

vue中的 ref 和 $refs

 

如图,ref 被用来给元素或子组件注册引用信息。引用信息将会注册在父组件的 $refs 对象上。如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子组件上,引用就指向组件实例:

在上面的例子中,input的引用信息为input1 ,$refs 是所有注册过的ref的一个集合,

console.log(this.$refs.input1)//<input type="text" id="input1">
console.log(document.getElementById('input1'))//<input type="text" id="input1">

这两种方法获得的都是Dom节点,而$refs相对document.getElementById的方法,会减少获取dom节点的消耗。

ref和v-for在一起的情况

li里的ref的无法读取item里面的值,即item.name或被直接读取为字符串“item.name”,

此时的$refs

第三部分:

一、ref使用在外面的组件上

HTML 部分

  1.  
    <div id="ref-outside-component" v-on:click="consoleRef">
  2.  
    <component-father ref="outsideComponentRef">
  3.  
    </component-father>
  4.  
    <p>ref在外面的组件上</p>
  5.  
    </div>
  6.  
     

js部分

  1.  
    var refoutsidecomponentTem={
  2.  
    template:"<div class='childComp'><h5>我是子组件</h5></div>"
  3.  
    };
  4.  
    var refoutsidecomponent=new Vue({
  5.  
    el:"#ref-outside-component",
  6.  
    components:{
  7.  
    "component-father":refoutsidecomponentTem
  8.  
    },
  9.  
    methods:{
  10.  
    consoleRef:function () {
  11.  
    console.log(this); // #ref-outside-component vue实例
  12.  
    console.log(this.$refs.outsideComponentRef); // div.childComp vue实例
  13.  
    }
  14.  
    }
  15.  
    });
  16.  
     

二、ref使用在外面的元素上

HTML部分

  1.  
    <!--ref在外面的元素上-->
  2.  
    <div id="ref-outside-dom" v-on:click="consoleRef" >
  3.  
    <component-father>
  4.  
    </component-father>
  5.  
    <p ref="outsideDomRef">ref在外面的元素上</p>
  6.  
    </div>

JS部分

  1.  
    var refoutsidedomTem={
  2.  
    template:"<div class='childComp'><h5>我是子组件</h5></div>"
  3.  
    };
  4.  
    var refoutsidedom=new Vue({
  5.  
    el:"#ref-outside-dom",
  6.  
    components:{
  7.  
    "component-father":refoutsidedomTem
  8.  
    },
  9.  
    methods:{
  10.  
    consoleRef:function () {
  11.  
    console.log(this); // #ref-outside-dom vue实例
  12.  
    console.log(this.$refs.outsideDomRef); // <p> ref在外面的元素上</p>
  13.  
    }
  14.  
    }
  15.  
    });
  16.  
     

三、ref使用在里面的元素上---局部注册组件

HTML部分

  1.  
    <!--ref在里面的元素上-->
  2.  
    <div id="ref-inside-dom">
  3.  
    <component-father>
  4.  
    </component-father>
  5.  
    <p>ref在里面的元素上</p>
  6.  
    </div>

JS部分

  1.  
    var refinsidedomTem={
  2.  
    template:"<div class='childComp' v-on:click='consoleRef'>" +
  3.  
    "<h5 ref='insideDomRef'>我是子组件</h5>" +
  4.  
    "</div>",
  5.  
    methods:{
  6.  
    consoleRef:function () {
  7.  
    console.log(this); // div.childComp vue实例
  8.  
    console.log(this.$refs.insideDomRef); // <h5 >我是子组件</h5>
  9.  
    }
  10.  
    }
  11.  
    };
  12.  
    var refinsidedom=new Vue({
  13.  
    el:"#ref-inside-dom",
  14.  
    components:{
  15.  
    "component-father":refinsidedomTem
  16.  
    }
  17.  
    });
  18.  
     

四、ref使用在里面的元素上---全局注册组件

HTML部分

  1.  
    <!--ref在里面的元素上--全局注册-->
  2.  
    <div id="ref-inside-dom-all">
  3.  
    <ref-inside-dom-quanjv></ref-inside-dom-quanjv>
  4.  
    </div>

JS部分

  1.  
    Vue.component("ref-inside-dom-quanjv",{
  2.  
    template:"<div class='insideFather'> " +
  3.  
    "<input type='text' ref='insideDomRefAll' v-on:input='showinsideDomRef'>" +
  4.  
    " <p>ref在里面的元素上--全局注册 </p> " +
  5.  
    "</div>",
  6.  
    methods:{
  7.  
    showinsideDomRef:function () {
  8.  
    console.log(this); //这里的this其实还是div.insideFather
  9.  
    console.log(this.$refs.insideDomRefAll); // <input type="text">
  10.  
    }
  11.  
    }
  12.  
    });
  13.  
     
  14.  
    var refinsidedomall=new Vue({
  15.  
    el:"#ref-inside-dom-all"
  16.  
    });

Vue 中的 ref $refs的更多相关文章

  1. Vue.js-11:第十一章 - Vue 中 ref 的使用

    一.前言 在之前的前端开发中,为了实现我们的需求,通常采用的方案是通过 JS/Jquery 直接操纵页面的 DOM 元素,得益于 Jquery 对于 DOM 元素优异的操作能力,我们可以很轻易的对获取 ...

  2. vue中$refs的使用

    vue中$refs获取组件或元素: 获取的元素就相当于是一个原生获取的元素,可以进行操作 this.$refs.ele.style.color = 'red

  3. Vue中$refs的用法

    说明:vm.$refs 一个对象,持有已注册过 ref 的所有子组件(或HTML元素) 使用:在 HTML元素 中,添加ref属性,然后在JS中通过vm.$refs.属性来获取 注意:如果获取的是一个 ...

  4. 【Vue】Vue中的父子组件通讯以及使用sync同步父子组件数据

    前言: 之前写过一篇文章<在不同场景下Vue组件间的数据交流>,但现在来看,其中关于“父子组件通信”的介绍仍有诸多缺漏或者不当之处, 正好这几天学习了关于用sync修饰符做父子组件数据双向 ...

  5. vue 中的translation操作----动态值

    在vue中,也会遇见translate的情况,这里顺带也可以带上如何查找页面中的元素的案例. 1.在加载过程中,有会遇见加载顺序先后的问题,然后查找页面元素null的情况,所以在mounted的钩子函 ...

  6. vue中引用swiper轮播插件

    有时候我们需要在vue中使用轮播组件,如果是在vue组件中引入第三方组件的话,最好通过npm安装,从而进行统一安装包管理. 申明:本文所使用的是vue.2x版本. 通过npm安装插件: npm ins ...

  7. 【转】简单理解Vue中的nextTick

    前言: Vue中的nextTick涉及到Vue中DOM的异步更新,感觉很有意思,特意了解了一下.其中关于nextTick的源码涉及到不少知识,很多不太理解,暂且根据自己的一些感悟介绍下nextTick ...

  8. 在vue中使用echarts图表

    在vue中使用echarts图表   转载请注明出处:https://www.cnblogs.com/wenjunwei/p/9815290.html 安装vue依赖 使用npm npm instal ...

  9. 总结vue中父向子,子向父以及兄弟之间通信的几种方式

    子向父方式1:通过props,如例子中子组件test1.vue向父组件App.vue传值 App.vue代码 <template> <div id="app"&g ...

随机推荐

  1. 前端通过js获取手机型号

    ###前段通过js获取手机型号 需求: 用户登录后记录当前的手机型号并记录 插件: mobile-detect.js插件地址 mobile-device-js插件地址 使用步骤: 获取UA信息-> ...

  2. 十四、i2c子系统

    由于之后的触摸屏驱动分析中使用到了GPIO子系统和i2c子系统,因此在分析触摸屏驱动之前我准备把这两个子系统进行简单分析. 在读者学习本章以及后续i2c相关章节之前,最好了解i2c通信方式,可以参考: ...

  3. S03_CH06_AXI_VDMA_OV7725摄像头采集系统

    S03_CH06_AXI_VDMA_OV7725摄像头采集系统 本课程将对Xilinx提供的一款IP核--AXI VDMA(Video Direct Memory Access) 进行详细讲解,为后续 ...

  4. Nginx学习笔记(一):Nginx 进程模型 / 事件处理模型

    Nginx 进程模型 ​​​​ 多进程模型 进程间相互独立,无需加锁,且互不影响: 一个进程退出了不影响其他的进程运行,降低风险: 当请求到来,多个 worker 通过竞争 accrpt_mutex ...

  5. 使用vue-cli创建vue工程

    在Windows环境下,打开命令行窗口,跳转至想创建工程的路径. 如:D:\MyWork\22_Github\rexel-cn\rexel-jarvis 创建vue工程,命令:vue create r ...

  6. JSP开发 路径问题汇总

    //第一种 jsp 表达式 <%=request.getContextPath %> 获取到 web项目名的绝对路径 <!--使用绝对路径的方式引入CSS文件--> <l ...

  7. 编程模型&编程思想

    编程模型 1.面向对象编程OOP 2.面向切面编程AOP Java静态接口,Java动态代理,字节码提升. 面向切面的两个方面: 拦截判断:方法,注解,参数,异常 拦截执行:前置,后置,返回,异常 3 ...

  8. umi model 注册

    model 分两类,一是全局 model,二是页面 model.全局 model 存于 /src/models/ 目录,所有页面都可引用:页面 model 不能被其他页面所引用. 规则如下: src/ ...

  9. 在windows环境中单机搭建rabbitmq集群

    建议单机版集群仅作为学习使用,生产环境最好使用多服务器集群来避免单点故障带来的服务不可用,必竟单机版的集是伪集群. 1:准备基础文件.环境变量 设置环境变量: 变量名:RABBITMQ_BASE 变量 ...

  10. 实战 | 源码入门之Faster RCNN

    前言 学习深度学习和计算机视觉,特别是目标检测方向的学习者,一定听说过Faster Rcnn:在目标检测领域,Faster Rcnn表现出了极强的生命力,被大量的学习者学习,研究和工程应用.网上有很多 ...