vue實例屬性-$refs和$el


關於$refs的官方介紹
一個對象,持有注冊過 ref attribute 的所有 DOM 元素和組件實例

關於$el的官方介紹

Vue 實例使用的根 DOM 元素

我們自己新建組件的時候,如何讓父組件直接觸發子組件的方法,比如父組件讓子組件的數據加1

父組件

 1 <template>
 2   <div>
 3       <div class="parent">
 4       父組件
 5       <button @click="add">父組件按鈕讓子組件加一</button>
 6       <Child ref="addChild"></Child>
 7       </div>
 8   </div>
 9 </template>
10 
11 <script>
12 import Child from './components/Child.vue'
13 
14   export default {
15     components:{
16       Child
17     },
18     methods:{
19       add(){
20         console.log(this.$refs.addChild)
21         this.$refs.addChild.add()
22       }
23     }
24   }
25 </script>
26 
27 <style  scoped>
28 .parent{
29   width: 200px;
30   height: 300px;
31   padding: 0 50px;
32   background: blue;
33   color: white;
34 }
35 </style>

子組件

 1 <template>
 2     <div>
 3         <div class="child">
 4         子組件數據{{a}}
 5 
 6         </div>
 7     </div>
 8 </template>
 9 
10 <script>
11     export default {  
12         data(){
13             return{
14               a:100
15             }
16         },
17         props:['name'],
18         methods:{
19 add(){
20     console.log(123)
21     this.a++
22 },
23 
24         }
25     }
26 </script>
27 
28 <style scoped>
29 .child{
30     width: 200px;
31     height: 200px;
32     background: orange;
33 }
34 </style>

需要注意的是$refs獲取的對象內容就是對應的ref屬性的實例

 

 

 

$refs屬性的內容包含了當前組件的所有dom和方法

此時我們在父組件中調用了子組件的add方法

1 methods:{
2   add(){
3     this.$refs.addChild.add()
4   }
5 }

子組件中的方法

1 methods:{
2     add() {
3         console.log(123)
4         this.a++
5     }
6     
7 }

此時我們看到觸發了子組件中的方法

 

 

 

如果一個頁面中有多個ref,此時會返回一個JSON對象,分別代表對應的ref實例

 1 <template>
 2   <div>
 3       <div class="parent">
 4       父組件
 5       <button @click="add">父組件按鈕讓子組件加一</button>
 6       <Child ref="addChild1"></Child>
 7       <Child ref="addChild2"></Child>
 8 
 9       </div>
10   </div>
11 </template>

 

 

 

 

如果ref對象不是一個自定義組件而是一個普通元素,返回的就是該元素本身

1 <div ref="Div">
2 我是div標簽
3 </div>
1  methods:{
2       add(){
3         console.log(this.$refs.Div)
4         // this.$refs.addChild.add()
5       }
6     }

 

 

 

 

 

此時思考一個問題,可以通過$refs去修改組件的樣式嘛?

1  methods:{
2       add(){
3         console.log(this.$refs.addChild.style)
4         // this.$refs.addChild.add()
5       }
6     }

按時瀏覽器卻返回的是undefined,因為$refs如果是一個組件,就沒有style樣式屬性,我們要想修改對應的組件樣式,需要通過$el

 

 

1 methods:{
2       add(){
3         console.log(this.$refs.addChild.$el)
4         // this.$refs.addChild.add()
5       }
6     }

此時我們會發現這里返回的是一個根節點

 

 我們試一下

1 methods:{
2       add(){
3         console.log(this.$refs.addChild.$el.style="color:red")
4         // this.$refs.addChild.add()
5       }
6     }

此時點記憶下,發現可以用$el來修改對應的組件樣式

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM