摘要:判斷當(dāng)前登陸用戶對(duì)是否有權(quán)限如果當(dāng)前用戶是如果當(dāng)前是公開的當(dāng)前用戶有此的權(quán)限有沒有中如果當(dāng)前用戶有此的某個(gè)子的權(quán)限根據(jù)的數(shù)據(jù)數(shù)組生成對(duì)應(yīng)的標(biāo)簽數(shù)組使用遞歸調(diào)用根據(jù)的數(shù)據(jù)數(shù)組生成對(duì)應(yīng)的標(biāo)簽數(shù)組使用遞歸調(diào)用得到當(dāng)前請(qǐng)求的路由路徑如果當(dāng)前用戶
class LeftNav extends Component {
/*
判斷當(dāng)前登陸用戶對(duì)item是否有權(quán)限
*/
hasAuth = (item) => {
const {key, isPublic} = item const menus = memoryUtils.user.role.menus const username = memoryUtils.user.username /* 1. 如果當(dāng)前用戶是admin 2. 如果當(dāng)前item是公開的 3. 當(dāng)前用戶有此item的權(quán)限: key有沒有menus中 */ if(username==="admin" || isPublic || menus.indexOf(key)!==-1) { return true } else if(item.children){ // 4. 如果當(dāng)前用戶有此item的某個(gè)子item的權(quán)限 return !!item.children.find(child => menus.indexOf(child.key)!==-1) } return false
}
/*
根據(jù)menu的數(shù)據(jù)數(shù)組生成對(duì)應(yīng)的標(biāo)簽數(shù)組
使用map() + 遞歸調(diào)用
*/
getMenuNodes_map = (menuList) => {
return menuList.map(item => { if(!item.children) { return () } else { return ( {item.title} ) } }) {item.title} } > {this.getMenuNodes(item.children)}
}
/*
根據(jù)menu的數(shù)據(jù)數(shù)組生成對(duì)應(yīng)的標(biāo)簽數(shù)組
使用reduce() + 遞歸調(diào)用
*/
getMenuNodes = (menuList) => {
// 得到當(dāng)前請(qǐng)求的路由路徑 const path = this.props.location.pathname return menuList.reduce((pre, item) => { // 如果當(dāng)前用戶有item對(duì)應(yīng)的權(quán)限, 才需要顯示對(duì)應(yīng)的菜單項(xiàng) if (this.hasAuth(item)) { // 向pre添加if(!item.children) { pre.push(( )) } else { // 查找一個(gè)與當(dāng)前請(qǐng)求路徑匹配的子Item const cItem = item.children.find(cItem => path.indexOf(cItem.key)===0) // 如果存在, 說明當(dāng)前item的子列表需要打開 if (cItem) { this.openKey = item.key } // 向pre添加 {item.title} pre.push(( )) } } return pre }, []) {item.title} } > {this.getMenuNodes(item.children)}
}
/*
在第一次render()之前執(zhí)行一次
為第一個(gè)render()準(zhǔn)備數(shù)據(jù)(必須同步的)
*/
componentWillMount () {
this.menuNodes = this.getMenuNodes(menuList)
}
render() {
// debugger // 得到當(dāng)前請(qǐng)求的路由路徑 let path = this.props.location.pathname console.log("render()", path) if(path.indexOf("/product")===0) { // 當(dāng)前請(qǐng)求的是商品或其子路由界面 path = "/product" } // 得到需要打開菜單項(xiàng)的key const openKey = this.openKey return ()硅谷后臺(tái)
}
}
/*
withRouter高階組件:
包裝非路由組件, 返回一個(gè)新的組件
新的組件向非路由組件傳遞3個(gè)屬性: history/location/match
*/
export default withRouter(LeftNav)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/106424.html
摘要:原生寫的輪播兼容移動(dòng)端插件,支持輪播速度,輪播內(nèi)容,輪播間隔,手勢(shì)靈敏度自定義,導(dǎo)航圓點(diǎn)點(diǎn)擊跳轉(zhuǎn)手勢(shì)滑動(dòng)。使用說明文件包含小部分語法編寫的文件,在移動(dòng)端有兼容性問題,僅供于源碼參考。移動(dòng)端跟端開發(fā)引用文件直接下載進(jìn)行引入使用。 slide.js 原生js寫的輪播兼容 pc+移動(dòng)端 插件,支持輪播速度,輪播內(nèi)容,輪播間隔,手勢(shì)靈敏度自定義,導(dǎo)航圓點(diǎn)點(diǎn)擊跳轉(zhuǎn),手勢(shì)滑動(dòng)。 使用說明:sli...
摘要:翻譯正文第一次聲明變量時(shí),請(qǐng)不要忘記使用關(guān)鍵字聲明使用代替空字符串轉(zhuǎn)成布爾值都為每行代碼的末尾最好都加上個(gè)分號(hào)最好給對(duì)象都添加上構(gòu)造函數(shù)在使用和盡量小心。 翻譯介紹 翻譯標(biāo)題:45 Useful JavaScript Tips, Tricks and Best Practices 翻譯來源:http://modernweb.com/2013/12/23/45-useful-java...
摘要:對(duì)進(jìn)行序列化和反序列化避免使用和構(gòu)造函數(shù)使用和構(gòu)造函數(shù)是非常昂貴的操作,因?yàn)槊看嗡麄兌紩?huì)調(diào)用腳本引擎將源代碼轉(zhuǎn)換成可執(zhí)行代碼。 原文:45 Useful JavaScript Tips, Tricks and Best Practices 譯文:45個(gè)有用的JavaScript技巧,竅門和最佳實(shí)踐 譯者:dwqs 在這篇文章中,我將分享一些JavaScript常用的技巧,竅門和最...
摘要:數(shù)組元素刪除應(yīng)使用。用來序列化與反序列化結(jié)果為的值與對(duì)象相同不要使用或者函數(shù)構(gòu)造器和函數(shù)構(gòu)造器的開銷較大,每次調(diào)用,引擎都要將源代碼轉(zhuǎn)換為可執(zhí)行的代碼。 收藏自 JavaScript奇技淫巧45招 JavaScript是一個(gè)絕冠全球的編程語言,可用于Web開發(fā)、移動(dòng)應(yīng)用開發(fā)(PhoneGap、Appcelerator)、服務(wù)器端開發(fā)(Node.js和Wakanda)等等。JavaSc...
摘要:使用閉包實(shí)現(xiàn)私有變量譯者添加未在構(gòu)造函數(shù)中初始化的屬性在語句結(jié)尾處使用分號(hào)在語句結(jié)尾處使用分號(hào)是一個(gè)很好的實(shí)踐。總結(jié)我知道還有很多其他的技巧,竅門和最佳實(shí)踐,所以如果你有其他想要添加或者對(duì)我分享的這些有反饋或者糾正,請(qǐng)?jiān)谠u(píng)論中指出。 showImg(http://segmentfault.com/img/bVbJnR); 如你所知,JavaScript是世界上第一的編程語言(編者注:2...
閱讀 3514·2023-04-25 20:09
閱讀 3720·2022-06-28 19:00
閱讀 3035·2022-06-28 19:00
閱讀 3058·2022-06-28 19:00
閱讀 3132·2022-06-28 19:00
閱讀 2860·2022-06-28 19:00
閱讀 3014·2022-06-28 19:00
閱讀 2610·2022-06-28 19:00