在Vue中,mounted生命周期鉤子函數標志著組件DOM已經掛載,但是有些時候我們需要在組件掛載后從服務器獲取數據。這時候,我們可以使用mounted函數來獲取數據。
mounted(){ axios.get('/api/data').then(response =>this.data = response.data); }
在上面的代碼中,我們使用axios庫來請求數據,然后將響應數據賦值給組件的data屬性。這樣做,我們就可以在組件掛載后從服務器獲取數據了。
當mounted函數被調用時,組件DOM已經掛載,但是還沒有渲染。這意味著可以在mounted函數中修改組件的DOM,但是這不是一個好的實踐,因為這有可能導致無法預料的副作用。
mounted(){ this.$nextTick(() =>{ // DOM is now updated }) }
上面的代碼中,我們使用Vue的$nextTick函數來確保組件已經渲染,然后再修改DOM。$nextTick函數接收一個回調函數,該函數會在DOM更新之后被調用。
有時候,我們需要在mounted函數中獲取父組件傳遞的屬性值。由于父組件的屬性值可能會在mounted函數之后才被設置,我們需要使用Vue提供的$parent屬性來獲取父組件實例,并在$nextTick回調函數中獲取屬性值。
mounted(){ this.$nextTick(() =>{ const parentData = this.$parent.data; }) }
在上面的代碼中,我們先使用$nextTick函數確保組件已經渲染,然后通過$this.$parent獲取父組件實例,最后在回調函數中獲取父組件的屬性值。
mounted函數也可以用來綁定一些事件監聽器。
mounted(){ window.addEventListener('click', this.handleClick); }, methods: { handleClick(){ // handle click event } }
上面的代碼中,我們在mounted函數中綁定了一個click事件監聽器。當組件DOM掛載完畢后,就可以監聽window的click事件了。
最后,mounted函數也可以用來初始化一些非響應式的數據。
mounted(){ this.counter = 0; }
在上面的代碼中,我們在mounted函數中初始化了一個counter變量,該變量不會被Vue響應式追蹤。這樣做的好處是counter變量的變化不會觸發組件重新渲染,從而提高性能。