Tengo un componente de VueJS. Necesito mostrar una parte de él si hay un controlador para el evento 'evento'.

<!-- here is my simple component -->
<cmp v-on:event='foo'></cmp>

<!-- here its template -->
<div id='cmpTemplate'>
  <p>Show it only if v-on:event is not empty</p>
<div>

Agregar propiedades adicionales no es una solución tan ordenada.

0
Alexander C 17 oct. 2018 a las 09:29

2 respuestas

La mejor respuesta

Los componentes tienen la propiedad $listeners, que es el diccionario de funciones que están vinculadas al componente en v-on, y creo que podría usarlo para esto.

De https://vuejs.org/v2/guide/components-custom-events .html:

{
  focus: function (event) { /* ... */ }
  input: function (value) { /* ... */ },
}

Pero te aconsejo que sigas el consejo de @kat y que no lo hagas. Esto parece que no fue diseñado para esto, y piense más en esto: ¿desea tener un componente que cambie su comportamiento dependiendo de si es visto por otra persona? A menos que diseñe una partícula cuántica, no es así como los componentes deberían funcionar en mi mente.


Me acabo de dar cuenta de que he visto el comportamiento que desea antes (aunque todavía creo que no vale la pena hacerlo con los botones, como sugiere su comentario), pero tal vez esto funcione mejor para usted. Eche un vistazo a: https://bootstrap-vue.js.org/docs/components / table Esta es una tabla, que tiene un accesorio provider que puede ser una función. Cambia el comportamiento ya sea que establezca provider o no; si no lo hace, no invoca la función, sino que busca la propiedad item para obtener los datos.

Esto se hace usando v-bind en lugar de v-on, pero el enlace se realiza a la función. Este podría ser un mejor enfoque, ya que ya no tienes que usar $listeners y te da una idea de que el comportamiento cambia dependiendo de si estableces la propiedad en una función o en null.

1
Archeg 17 oct. 2018 a las 08:37

Definiría y enviaría el vOnStatus = true para el evento v-on: adjunto y luego haría v-if = "vOnStatus" para los elementos que quiero mostrar

2
kat 17 oct. 2018 a las 07:00