最近在研究el-admin,角色管理裏面有個功能是點擊左側的表格裏面的一個角色,右側的樹就會自動初始化。
於是我在點擊的方法裏面,去後臺異步調用了一下接口,然後返回數據並把數據賦值給menuIds,但是我發現這個異步請求獲取到的數據壓根就不能讓樹控件刷新。
代碼如下,我是在handleCurrentChange裏面操作的,網上說通過push方法能夠起作用,但是根本沒用,最後我的解決方法如下,先將ids都存儲起來,然後再在nextTick方法裏面去給menuIds賦值。
async initMenus(val) {
this.menuIds = []
const AV = window.AV
const role = AV.Object.createWithoutData('Role', val.objectId);
const roleMenuQuery = new AV.Query('RoleMenu');
roleMenuQuery.equalTo("role", role)
roleMenuQuery.include("menu")
var roleMenus = await roleMenuQuery.find()
var ids = [];
roleMenus.forEach(roleMenu => {
var roleMenuJson = roleMenu.toJSON()
ids.push(roleMenuJson.menu.menuId)
})
this.$nextTick(() => {
this.menuIds = ids;
})
// https://blog.csdn.net/xudalin/article/details/103158941
// 這個代碼解決了樹控件的半選問題。參考鏈接如上
/*ids.forEach((i, n) => {
var node = this.$refs.menu.getNode(i);
console.log(node.isLeaf)
if (node.isLeaf) {
this.$refs.menu.setChecked(node, true);
}
});*/
},
// 觸發單選
handleCurrentChange(val) {
console.log("handleCurrentChange")
if (val) {
const _this = this
// 清空菜單的選中
this.$refs.menu.setCheckedKeys([])
// 保存當前的角色id
this.currentId = val.id
// this.showButton = this.level <= val.level
// 初始化
this.initMenus(val)
// 菜單數據需要特殊處理
/*val.menus.forEach(function (data, index) {
_this.menuIds.push(data.id)
})*/
}
},