前言
近期有努力將 adminlte 套版在專案上,有試著用別人的專案上面改成自己的API,遇到專案上”Menu”是寫死並非是Ajax 回拋過來進行改寫。
使用專案
本篇是用這個來做練習。
- Github : erdkse/adminlte-3-vue
撰寫 ajax
使用前務必要自行安裝 axios
- 使用教學 : 點選我
修改服務 Auth.ts
這邊有關 authorizer 定義,我們將 Menu API 加入在這裡專案上面即可。
這個版本有幫你寫好 alert 工具 ,只需要改寫 getError 內容即可。
1 | export const getUsersMenus = async () => { |
加入 menu-sidebar.ts
這段需要注意。axios 是利用非同步方式回傳,若網頁是先載完後就不再回頭撈一次未跑完的 ajax 。
這驗就使用使用 created() 把 this.menu 資訊存入,可以確保完成前必定會完成這段 ajax 。
- 生命週期 : 點選我
import {IUser} from '@/interfaces/user';
import {Options, Vue} from 'vue-class-component';
import MenuItem from '@/components/menu-item/menu-item.vue';
import {PfImage} from '@profabric/vue-components';
import SidebarSearch from '@/components/sidebar-search/sidebar-search.vue';
// import {i18n} from '@/translation';
import {getUsersMenus} from '@/services/auth'
@Options({
name: 'app-menu-sidebar',
components: {
'app-menu-item': MenuItem,
'app-sidebar-search': SidebarSearch,
'pf-image': PfImage
}
})
export default class MenuSidebar extends Vue {
public menu: any = []; // 設置為空數組,直到 Promise 解決為止
get user(): IUser {
return this.$store.getters['auth/user'];
}
get sidebarSkin() {
return this.$store.getters['ui/sidebarSkin'];
}
async created() { // 確保 Promise 解決後,再繼續創建組件
this.menu = await getUsersMenus();
}
}
``
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 John Conte!
評論
DisqusGitalk