做法
在 src 資料夾的 main.js 檔建立一個滾動指令。
| 12
 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 指令。
| 12
 3
 
 | <divv-scroll="handleScroll"
 />
 
 | 
定義一個 handleScroll() 方法,處理滾動事件。
| 12
 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() 方法。
| 12
 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);
 });
 });
 },
 
 | 
參考資料