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
<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實例,組件實例 } } });
//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> } } });
//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 } });
//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" });