vue裏ref ($refs)用法

ref 有三種用法:vue

  一、ref 加在普通的元素上,用this.ref.name 獲取到的是dom元素數組

  二、ref 加在子組件上,用this.ref.name 獲取到的是組件實例,能夠使用組件的全部方法dom

  三、如何利用 v-for 和 ref 獲取一組數組或者dom 節點ide

  注意:this

  一、ref 須要在dom渲染完成後纔會有,在使用的時候確保dom已經渲染完成。好比在生命週期 mounted(){} 鉤子中調用,或者在 this.$nextTick(()=>{}) 中調用spa

  二、若是ref 是循環出來的,有多個重名,那麼ref的值會是一個數組 ,此時要拿到單個的ref 只須要循環就能夠了。code

1、ref使用在外面的組件上

複製代碼
<div id="ref-outside-component" v-on:click="consoleRef">
    <component-father ref="outsideComponentRef">
    </component-father>
    <p>ref在外面的組件上</p>
</div>

    var refoutsidecomponentTem={
        template:"<div class='childComp'><h5>我是子組件</h5></div>"
    };
    var refoutsidecomponent=new Vue({
        el:"#ref-outside-component",
        components:{
            "component-father":refoutsidecomponentTem
        },
        methods:{
            consoleRef:function () {
                console.log(this); // #ref-outside-component     vue實例
                console.log(this.$refs.outsideComponentRef);  // div.childComp vue實例,組件實例
            }
        }
    });
複製代碼

2、ref做用在外面元素上

複製代碼
//ref在外面的元素上
<div id="ref-outside-dom" v-on:click="consoleRef" >
   <component-father>
   </component-father>
   <p ref="outsideDomRef">ref在外面的元素上</p>
</div>

    var refoutsidedomTem={
        template:"<div class='childComp'><h5>我是子組件</h5></div>"
    };
    var refoutsidedom=new Vue({
        el:"#ref-outside-dom",
        components:{
            "component-father":refoutsidedomTem
        },
        methods:{
            consoleRef:function () {
                console.log(this); // #ref-outside-dom    vue實例
                console.log(this.$refs.outsideDomRef);  //  <p>標籤dom元素 ref在外面的元素上</p>
            }
        }
    });
複製代碼

3、ref使用在裏面的元素上--局部註冊組件

複製代碼
//ref在裏面的元素上
<div id="ref-inside-dom">
    <component-father>
    </component-father>
    <p>ref在裏面的元素上</p>
</div>

    var refinsidedomTem={
        template:"<div class='childComp' v-on:click='consoleRef'>" +
                       "<h5 ref='insideDomRef'>我是子組件</h5>" +
                  "</div>",
        methods:{
            consoleRef:function () {
                console.log(this);  // div.childComp   vue實例 
                console.log(this.$refs.insideDomRef);  // <h5 >我是子組件</h5>
            }
        }
    };
    var refinsidedom=new Vue({
        el:"#ref-inside-dom",
        components:{
            "component-father":refinsidedomTem
        }
    });
複製代碼

4、ref使用在裏面的元素上--全局註冊組件

複製代碼
//ref在裏面的元素上--全局註冊
<div id="ref-inside-dom-all">
    <ref-inside-dom-quanjv></ref-inside-dom-quanjv>
</div>

    Vue.component("ref-inside-dom-quanjv",{
        template:"<div class='insideFather'> " +
                    "<input type='text' ref='insideDomRefAll' v-on:input='showinsideDomRef'>" +
                    "  <p>ref在裏面的元素上--全局註冊 </p> " +
                  "</div>",
        methods:{
            showinsideDomRef:function () {
                console.log(this); //這裏的this其實仍是div.insideFather
                console.log(this.$refs.insideDomRefAll); // <input  type="text">
            }
        }
    });

    var refinsidedomall=new Vue({
        el:"#ref-inside-dom-all"
    });
相關文章
相關標籤/搜索