You can mix external codes with no problem with Vue.js. instances. See the example I made, I created a variable called condicao
out of Vue and associated it in the Vue instance. When you do this, the external variable is transformed into two-way databind.
Once the two-way databind is created, you can use external functions to manipulate this data, including when it is changed, the Vue recognizes and changes the component without any problem.
Also create a function to validate the button, in it you disable or enable according to the conditions of the external variable.
Follow the code below:
var condicao = {
opcao1: false,
opcao2: false,
opcao3: false,
};
function habilitarBotaoComFuncaoExterna() {
condicao.opcao1 = true;
condicao.opcao2 = true;
condicao.opcao3 = true;
}
function desabilitarBotaoComFuncaoExterna() {
condicao.opcao1 = false;
condicao.opcao2 = false;
condicao.opcao3 = false;
}
new Vue({
el: "#app",
data: {
aba: 1,
condicao: condicao,
},
methods: {
verificaCondicao: function() {
return !!this.condicao.opcao1 && !!this.condicao.opcao2 && !!this.condicao.opcao3;
},
fazAlgumaCoisa: function() {
console.log('Botão clicado, faz alguma coisa...');
},
trocarDeAba: function($event, aba) {
if (!this.verificaCondicao()) {
console.log('Habilite opções para prosseguir com a troca de guia.');
return; // Cancela a ação pois não foi atendida
}
// Troca de aba
this.aba = aba;
}
}
});
<script src="https://unpkg.com/[email protected]/dist/vue.min.js"></script><divid="app">
<div>
<div>
<a href="#" v-on:click.prevent="trocarDeAba($event, 1)">Aba 1</a>
<a href="#" v-on:click.prevent="trocarDeAba($event, 2)">Aba 2</a>
<a href="#" v-on:click.prevent="trocarDeAba($event, 3)">Aba 3</a>
</div>
<div>
<div v-if="aba == 1">Conteúdo Aba 1 ******************</div>
<div v-if="aba == 2">Conteúdo Aba 2 ------------------</div>
<div v-if="aba == 3">Conteúdo Aba 3 ##################</div>
</div>
<div v-if="verificaCondicao()">
<h4>Agora você pode clicar nas abas</h4>
</div>
<div v-else>
<h4>Marque as opções para poder alterar de guia</h4>
</div>
</div>
<hr />
<div>
<button v-on:click="fazAlgumaCoisa()" class="actAplicarTodosFiltros" :disabled="!verificaCondicao()">
Opção com Condições
</button>
</div>
<ul>
<li><input v-model="condicao.opcao1" type="checkbox"> Condição 01</li>
<li><input v-model="condicao.opcao2" type="checkbox"> Condição 02</li>
<li><input v-model="condicao.opcao3" type="checkbox"> Condição 03</li>
</ul>
</div>
<div>
<button onClick="habilitarBotaoComFuncaoExterna()">Fora do Vuejs - Habilitar</button>
<button onClick="desabilitarBotaoComFuncaoExterna()">Fora do Vuejs - Habilitar</button>
</div>