鍍金池/ 問(wèn)答/HTML/ iview 中, switch 開(kāi)關(guān)如何在 methods 中控制?

iview 中, switch 開(kāi)關(guān)如何在 methods 中控制?

這是代碼:

<i-switch size="small" :value="isEnable" @on-change="switch"/>
<script>
    new Vue({
        el: '#app',
        data: {
            isEnable: false
        },
        methods: {
            switchTokenLogin: function(status){
                this.isEnable = false;
            }
        }
    })
</script>

預(yù)想的是:當(dāng)點(diǎn)擊開(kāi)關(guān)時(shí)(無(wú)論開(kāi)或關(guān)),他總是處于關(guān)閉狀態(tài),但上面的代碼卻達(dá)不到,,設(shè)置了 isEnable 這個(gè)值頁(yè)面不能正常重新渲染,,大佬們這個(gè)怎么解?

回答
編輯回答
拼未來(lái)

當(dāng)點(diǎn)擊開(kāi)關(guān)時(shí)(無(wú)論開(kāi)或關(guān)),他總是處于關(guān)閉狀態(tài)

你首先得把 value 緩存 v-model

我的代碼示例:

<i-switch v-model="m1" :loading="loading">
            <span slot="open">開(kāi)</span>
            <span slot="close">關(guān)</span>
        </i-switch>
        {{ m1 }}
        <div @click="m1 = false">toggle</div>
    
    data 里面:m1: true
   
2018年5月2日 19:28
編輯回答
孤客

iview沒(méi)有相應(yīng)的函數(shù)可以控制,不過(guò)可以使用disabled屬性模擬

<i-switch v-model="switch1" @on-change="change" :disabled="!(disabled && switch1)"/>

data () {
    return {
        switch1: true,
        disabled: true
    }  
},
methods: {
    change (status) {
        this.disabled = false
    }
}

17:30補(bǔ)充

根據(jù)你發(fā)的鏈接看了下,剛開(kāi)始以為是增加了before-change事件,但是查看文檔,源碼都沒(méi)找到相應(yīng)的內(nèi)容,查了下三個(gè)版本的版本更新,也沒(méi)有找到switch組件before-change的更新內(nèi)容
switch點(diǎn)擊和input事件

再次看了下鏈接上講的,最后一個(gè)回復(fù)是

我認(rèn)為Promise應(yīng)該是開(kāi)發(fā)者端配置的。而我們這樣寫(xiě)的話:

    this.beforeChange().then((result)=>{
        // xxx
    })
本質(zhì)上iView不用做任何處理,開(kāi)發(fā)者使用時(shí),他可以根據(jù)自己當(dāng)前的情況來(lái)考慮要不要做Polyfill。

所以,他的意思是iview并沒(méi)有增加相關(guān)事件,而是讓我們用Promise自己實(shí)現(xiàn),所以這就變成了需要我們自己等待狀態(tài)改變后再去手動(dòng)改變他的狀態(tài),那么使用Promise可以這么寫(xiě)

data () {
    return {
        switch1: true
    }  
},
methods: {
    beforeChange(val){
        return val ? new Promise((resolve) => {
        setTimeout(function () {
            resolve(true);
        }, 300);
        }) : false
    },
    change (status) {
        var r = this.beforeChange(status)
        r && r.then(()=>{
            this.switch1 = false
        })
    }
}

這種的就變成了狀態(tài)由true改為false正常使用,但是由false變成true,會(huì)先改變?yōu)閠rue,300ms(可自己定義時(shí)長(zhǎng))后狀態(tài)再變成false

不知道你要的可是這種,我覺(jué)得你想要的應(yīng)該是狀態(tài)為false后不可點(diǎn)擊。這個(gè)我覺(jué)得只能通過(guò)修改源碼來(lái)實(shí)現(xiàn)了

2017年4月18日 17:03