vue props component javascript vue.js

javascript - component - vue props default



¿Cómo llamar a múltiples funciones con @click in vue? (10)

Pregunta:

¿Cómo llamar a múltiples funciones en un solo @click? (también conocido como v-on:click )?

Lo intenté

  • Funciones divididas con punto y coma: <div @click="fn1(''foo'');fn2(''bar'')"> </div> ;

  • Utilice varios @click : <div @click="fn1(''foo'')" @click="fn2(''bar'')"> </div> ;

pero como hacerlo correctamente?

PD : seguro que siempre puedo hacer

<div v-on:click="fn1(''foo'');fn2(''bar'')"> </div>

Pero a veces esto no es bueno.


Separar en pedazos.

En línea:

<div v-on:click="firstFunction(); secondFunction();"></div>

O: a través de una función compuesta:

<div v-on:click="return function() { fn1(''foo'');fn2(''bar''); }()"> </div>


El manejo de eventos Vue solo permite llamadas de función única. Si necesita hacer varias, puede hacer una envoltura que incluya ambas:

<v-btn absolute fab small slot="activator" top right color="primary" @click="(addTime = true),(ticketExpenseList = false)"><v-icon>add</v-icon></v-btn>

EDITAR

Otra opción es editar el primer controlador para tener una devolución de llamada y pasar el segundo.

<div @click="handler"></div> //////////////////////////// handler: function() { //Syntax assuming its in the ''methods'' option of Vue instance fn1(''foo''); fn2(''bar''); }


En primer lugar, puede usar la notación corta @click lugar de v-on:click para @click lectura.

En segundo lugar, puede usar un controlador de eventos de clic que llama a otras funciones / métodos como @Tushar mencionó en su comentario anterior, por lo que termina con algo como esto:

<div v-on:click="fn1(''foo'')" v-on:click="fn2(''bar'')"> </div>


Esta forma simple de hacer v-on: click = "firstFunction (); secondFunction ();"


Esto funciona para mí cuando necesita abrir otro cuadro de diálogo haciendo clic en un botón dentro de un cuadro de diálogo y también cerrar este. Pase los valores como parámetros con un separador de coma.

<div @click="f1() + f2()"></div>


Estoy en Vue 2.3 y puedo hacer esto:

<div v-on:click="fn3(''foo'', ''bar'')"> </div> function fn3 (args) { fn1(args); fn2(args); }


HTML:

<div @click="fn1(''foo'', fn2)"></div> //////////////////////////////////// fn1: function(value, callback) { console.log(value); callback(''bar''); }, fn2: function(value) { console.log(value); }

JS:

<button @click="firstFunction(); secondFunction();">Ok</button>


Sin embargo, puedes hacer algo como esto:

<div id="example"> <button v-on:click="multiple">Multiple</button> </div>

sí, usando el evento html onclick nativo.


agregar una función anónima para hacer eso puede ser una alternativa:

<div id="app"> <div @click="handler(''foo'',''bar'')"> Hi, click me! </div> </div> <!-- link to vue.js !--> <script src="vue.js"></script> <script> (function(){ var vm = new Vue({ el:''#app'', methods:{ method1:function(arg){ console.log(''method1: '',arg); }, method2:function(arg){ console.log(''method2: '',arg); }, handler:function(arg1,arg2){ this.method1(arg1); this.method2(arg2); } } }) }()); </script>


en Vue 2.5.1 para botones funciona

<div @click="f3()"></div> <script> var app = new Vue({ // ... methods: { f3: function() { f1() + f2(); } f1: function() {}, f2: function() {} } }) </script>