VueJS - Пропустить первую смену наблюдателя - PullRequest
0 голосов
/ 04 октября 2018

Я создаю компонент в VueJS для приложения, которое я делаю, и у него есть некоторые наблюдатели, чтобы применять логику к другим частям компонента при изменении моей переменной.Как только компонент инициализирован, он все еще должен быть установлен некоторыми данными с сервера, поступающими после нескольких событий, выполненных пользователем через Axios.Эти данные попадают в компонент из события, генерируемого основным приложением.Дело в том, что этот var обычно изменяется (не всегда), но я не хочу, чтобы эта логика применялась в первый раз, поэтому я решил установить флаг и проверить его в наблюдателе, чтобы он вернулся, но этого не происходит:как только я верну этому флагу значение true (он проверяет! this.flag), наблюдатель все равно сработает.Вот код:

data(){
    return {
        isSet: false,
        myVar: {
            first: 0,
            second: 0
        }
    }
},
watch: {
    'myVar.first': {
        handler: function(newVal, oldVal){
            if(!this.isSet || other.condition){return}
            console.log('first triggered');
        },
        immediate: false
    },
    'myVar.second': {
        handler: function(newVal, oldVal){
            if(!this.isSet || other.condition){return}
                console.log('second triggered');
        },
        immediate: false
    }
},
methods: {
    setBus(){ // gets called on created(){}
        let self = this;
        Bus.$on('my-event', function(c){
            self.doFirstSet(c);
        });
    },
    doFirstSet(c){
        // do other setting
        if(c.someCondition){
            this.doExtraConfig(c);
        }
        this.isSet = true; // at this point is when the watchers get triggered
    },
    doExtraConfig(c){
        // do more stuff
        if('first' in c){
            this.myVar.first = c.first;
        }else if('second' in c){
            this.myVar.second = c.second;
        }
        console.log("watchers don't get triggered yet");
    }
}

Есть идеи, как остановить их срабатывание при смене флага?

1 Ответ

0 голосов
/ 04 октября 2018

Вы должны просто объявить булеву переменную, которая определяет, завершена ли ваша выборка данных.По умолчанию вы устанавливаете значение false doneFetching: false, и как только логика выборки завершена, вы вызываете this.doneFetching = true.

. После этого все, что вам нужно сделать в наблюдателе, - это просто и просто if(this.doneFetching){...} Эта простая логикадолжно препятствовать срабатыванию логики вашего наблюдателя до того, как вы этого захотите.

...