Vue与ref属性与refs

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>

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. });
二、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. });
三、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. });
四、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. var refinsidedomall=new Vue({
  14. el:"#ref-inside-dom-all"
  15. });



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值