若依框架的v-hasPermi

若依框架中自帶一個指令v-hasPermi钓辆,這個指令配合若以框架可以很方便地幫助開發(fā)者進行權(quán)限判斷,如以下代碼可以判斷用戶是否擁有刪除按鈕的權(quán)限洛退,并按需加載刪除按鈕(有刪除權(quán)限顯示碌廓,無刪除權(quán)限則不顯示):

<el-button size="mini" v-hasPermi="['test:remove']">刪除</el-button>

v-hasPermi有兩個需要注意的地方

1.如果v-hasPermiv-if需要同時使用闰非,需要分為兩級DOM,父級使用v-hasPermi,子級使用v-if

以如下代碼做演示:

<el-table :data="tableData" style="width: 100%">
    <el-table-column prop="state" label="狀態(tài)" />
    <el-table-column label="if-父級萝嘁;hasPermi-子級">
        <template slot-scope="scope">
            <el-button type="text" class="mr10" size="small">查看</el-button>
            <span v-if="scope.row.state == '未提交'">
                <el-button type="text" size="small" v-has-permi="['test:edit']">編輯</el-button>
                <el-button type="text" size="small" v-has-permi="['test:edit']">提交</el-button>
            </span>
            <span v-if="scope.row.state == '待審批'">
                <el-button type="text" class="clE34142" size="small" v-has-permi="['test:approve']">審批</el-button>
            </span>
        </template>
    </el-table-column>
    <el-table-column label="在同一個DOM">
        <template slot-scope="scope">
            <el-button type="text" class="mr10" size="small">查看</el-button>
            <el-button type="text" size="small" v-if="scope.row.state == '未提交'" v-has-permi="['test:edit']">編輯
            </el-button>
            <el-button type="text" size="small" v-if="scope.row.state == '未提交'" v-has-permi="['test:edit']">提交
            </el-button>
            <el-button type="text" class="clE34142" size="small" v-if="scope.row.state == '待審批'"
                v-has-permi="['test:approve']">審批</el-button>
        </template>
    </el-table-column>
    <el-table-column label="正常情況">
        <template slot-scope="scope">
            <el-button type="text" class="mr10" size="small">查看</el-button>
            <span v-has-permi="['test:edit']">
                <el-button type="text" size="small" v-if="scope.row.state == '未提交'">編輯</el-button>
                <el-button type="text" size="small" v-if="scope.row.state == '未提交'">提交</el-button>
            </span>
            <span v-has-permi="['test:approve']">
                <el-button type="text" class="clE34142" size="small" v-if="scope.row.state == '待審批'">審批</el-button>
            </span>
        </template>
    </el-table-column>
</el-table>
<el-pagination background layout="prev, pager, next" :total="23" @current-change="handleCurrentChange" />


// 數(shù)據(jù)準備
handleCurrentChange(val) {
    if(val == 1) {
        this.tableData = [
            { date: '2016-05-02', name: '王小虎', address: '上海市普陀區(qū)金沙江路 1518 弄', state: '未提交' },
            { date: '2016-05-02', name: '王小虎', address: '上海市普陀區(qū)金沙江路 1518 弄', state: '未提交' },
            { date: '2016-05-02', name: '王小虎', address: '上海市普陀區(qū)金沙江路 1518 弄', state: '未提交' },
            { date: '2016-05-02', name: '王小虎', address: '上海市普陀區(qū)金沙江路 1518 弄', state: '已審批' },
            { date: '2016-05-02', name: '王小虎', address: '上海市普陀區(qū)金沙江路 1518 弄', state: '已審批' },
        ]
    }else if(val == 2) {
        this.tableData = [
            { date: '2016-05-02', name: '王小虎', address: '上海市普陀區(qū)金沙江路 1518 弄', state: '已審批' },
            { date: '2016-05-02', name: '王小虎', address: '上海市普陀區(qū)金沙江路 1518 弄', state: '已審批' },
            { date: '2016-05-02', name: '王小虎', address: '上海市普陀區(qū)金沙江路 1518 弄', state: '已審批' },
            { date: '2016-05-02', name: '王小虎', address: '上海市普陀區(qū)金沙江路 1518 弄', state: '已審批' },
            { date: '2016-05-02', name: '王小虎', address: '上海市普陀區(qū)金沙江路 1518 弄', state: '已審批' },
        ]
    }else if(val == 3) {
        this.tableData = [
            { date: '2016-05-02', name: '王小虎', address: '上海市普陀區(qū)金沙江路 1518 弄', state: '待審批' },
            { date: '2016-05-02', name: '王小虎', address: '上海市普陀區(qū)金沙江路 1518 弄', state: '待審批' },
        ]
    }
},

在以上代碼中梆掸,數(shù)據(jù)一共分為三種情況:未提交、待審批牙言、已審批
未提交時酸钦,可以進行 修改 和 提交 操作;待審批時咱枉,可以進行 審批 操作卑硫;已審批時,不可以進行額外操作
準備的數(shù)據(jù)為:
第一頁:三條未提交蚕断,兩條待審批拔恰;第二頁:五條待審批;第三頁:兩條已審批
v-ifv-hasPermi在此處一共有三種情況:v-if 在父級元素上基括, v-hasPermi在子級元素上颜懊;v-ifv-hasPermi在同一級元素上;v-hasPermi 在父級元素上风皿, v-if在子級元素上河爹;三種情況分別對應表格的三列
以三種情況分別初始化加載一、二桐款、三頁的數(shù)據(jù)時咸这,初始化表現(xiàn)都正常,但是切換頁碼時會出現(xiàn)以下問題:

  • 初始化加載第一頁數(shù)據(jù)魔眨,三種情況初始化第一頁都表現(xiàn)正常媳维;從第一頁切換到第二頁,三種情況第二頁都表現(xiàn)正常遏暴;從第一頁切換到第三頁侄刽,第一種和第二種情況表現(xiàn)異常(展示“審批”按鈕),第三種情況展示正常


    第一種朋凉、第二種多了“審批”按鈕

以下簡略描述:

  • 1==>2==>3==>1州丹,此時第一頁的前三條數(shù)據(jù)應該展示“編輯”和“提交”按鈕,但是第一種和第二種情況的前兩條數(shù)據(jù)只展示了“提交”按鈕(“編輯”按鈕被v-hasPermi影響移除了)杂彭,第三種情況展示正常

    第一種墓毒、第二種情況,被第三頁的權(quán)限判斷影響亲怠,缺少了第一個需要權(quán)限判斷的按鈕(“編輯”按鈕)

  • 1==>2==>3==>1==>3,此時第一種所计、第三種情況展示正常,第二種情況展示異常(多展示了“審批”按鈕)


    第二種多了“審批”按鈕
  • 1==>2==>3==>1==>3==>1,此時第二種团秽、第三種情況展示正常主胧,第一種情況展示異常(少展示了“編輯”按鈕)


    第一種情況钾腺,被第三頁的權(quán)限判斷影響,缺少了第一個需要權(quán)限判斷的按鈕(“編輯”按鈕)

其他情況不做一一展示
總之:當v-ifv-hasPermi需要同時使用時讥裤,需要把v-hasPermi放在父元素放棒,v-if放在子元素使用,其他情況初始化時可能會展示正常己英,但是經(jīng)過數(shù)據(jù)狀態(tài)變化之后间螟,可能會出現(xiàn)奇奇怪怪的問題

2.v-hasPermi的原理是在元素加載完成后,判斷用戶無權(quán)限時损肛,把加了權(quán)限判斷的元素移除厢破,所以<i>v-hasPermi</i>只能加在可以編譯為DOM的元素上,不能加在template上
<div>
    v-hasPermi 加在可編譯為DOM的元素上:
    <el-button size="small" type="primary" v-has-permi="['test:edit']">編輯</el-button>
    <el-button size="small" type="danger" v-has-permi="['test:approve']">審批</el-button>
</div>
<div class="mt10">
    v-hasPermi 加在template上:
    <template v-has-permi="['test:edit']">
        <el-button size="small" type="primary">編輯</el-button>
    </template>
    <template v-has-permi="['test:approve']">
        <el-button size="small" type="danger">審批</el-button>
    </template>
</div>
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末治拿,一起剝皮案震驚了整個濱河市摩泪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌劫谅,老刑警劉巖见坑,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異捏检,居然都是意外死亡荞驴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門贯城,熙熙樓的掌柜王于貴愁眉苦臉地迎上來熊楼,“玉大人,你說我怎么就攤上這事能犯■昶” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵踩晶,是天一觀的道長执泰。 經(jīng)常有香客問我,道長合瓢,這世上最難降的妖魔是什么坦胶? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮晴楔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘峭咒。我一直安慰自己税弃,他們只是感情好,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布凑队。 她就那樣靜靜地躺著则果,像睡著了一般幔翰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上西壮,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天遗增,我揣著相機與錄音,去河邊找鬼款青。 笑死做修,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的抡草。 我是一名探鬼主播饰及,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼康震!你這毒婦竟也來了燎含?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤腿短,失蹤者是張志新(化名)和其女友劉穎屏箍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體橘忱,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡铣除,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鹦付。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尚粘。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖敲长,靈堂內(nèi)的尸體忽然破棺而出郎嫁,到底是詐尸還是另有隱情,我是刑警寧澤祈噪,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布泽铛,位于F島的核電站,受9級特大地震影響辑鲤,放射性物質(zhì)發(fā)生泄漏盔腔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一月褥、第九天 我趴在偏房一處隱蔽的房頂上張望弛随。 院中可真熱鬧,春花似錦宁赤、人聲如沸舀透。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽愕够。三九已至走贪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惑芭,已是汗流浹背坠狡。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留遂跟,地道東北人逃沿。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像漩勤,于是被迫代替她去往敵國和親感挥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容