起因是接手開發(fā)代碼的時(shí)候發(fā)現(xiàn)有個(gè)按鈕的單擊事件一直報(bào)錯(cuò),他是這樣寫的:
<button>按鈕 @click="$refs.table.refresh(true)"</button>
我確認(rèn)過注冊(cè)組件是table,明白想要實(shí)現(xiàn)的功能是查詢后表格刷新。
問題:
$refs是不能在template和computed里面訪問的,應(yīng)該把單擊事件綁定一個(gè)方法名,在方法中訪問$refs。$refs在渲染結(jié)束后才會(huì)生效,直接寫在template中相當(dāng)于table并沒有注冊(cè)到$refs當(dāng)中,所以會(huì)報(bào)Uncaught TypeError: Cannot read property '$refs' of null錯(cuò)誤。
官方說明:
關(guān)于 ref 注冊(cè)時(shí)間的重要說明:因?yàn)?ref 本身是作為渲染結(jié)果被創(chuàng)建的,在初始渲染的時(shí)候你不能訪問它們 - 它們還不存在!$refs 也不是響應(yīng)式的,因此你不應(yīng)該試圖用它在模板中做數(shù)據(jù)綁定。
可行方法:
//template
<button>按鈕 @click="btnRefresh"</button>
//js方法
btnRefresh() {
this.$refs.table.refreshs();
}
其他相關(guān)
ref被用來給元素或子組件注冊(cè)引用信息。引用信息將會(huì)注冊(cè)在父組件的 $refs 對(duì)象上。如果在普通的 DOM 元素上使用,引用指向的就是 DOM 元素;如果用在子組件上,引用就指向組件。
$refs是一個(gè)對(duì)象,里面包含ref注冊(cè)過的組件,可以訪問這個(gè)$refs對(duì)象方法對(duì)組件進(jìn)行操作。
https://blog.csdn.net/java_xxxx/article/details/81121199
https://blog.csdn.net/LPLIFE/article/details/95220875