做法
在 src
資料夾的 main.js
檔建立一個滾動指令。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Vue.directive('scroll', { inserted(el, binding) { const f = (evt) => { if (binding.value(evt, el)) { window.removeEventListener('scroll', f); } }; window.addEventListener('scroll', f); }, });
new Vue({ router, store, render: h => h(App), }).$mount('#app');
|
在元件中使用 v-scroll
指令。
1 2 3
| <div v-scroll="handleScroll" />
|
定義一個 handleScroll()
方法,處理滾動事件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| export default { methods: { handleScroll() { const scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop); const { innerHeight } = window; const { offsetHeight } = document.documentElement; if (scrollTop + innerHeight + 1 > offsetHeight) { this.setPage(this.page + 1); this.getKeys(); } return this.noData; }, }, };
|
在 Vuex 定義獲取遠端資源的 getKeys()
方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| getKeys({ commit }) { return new Promise((resolve, reject) => { axios({ method: 'GET', url: '/users/me/keys', }) .then(({ data }) => { commit('setKeys', [...state.keys, ...data.data]); commit('setNoData', data.data.length === 0) resolve(data); }) .catch((error) => { reject(error); }); }); },
|
參考資料