2017-01-11 1 views
1

Utilisation de composants à un seul fichier, comment puis-je modifier une propriété de données d'une directive?Vue.js 2, modification des données de la directive

Ainsi, par exemple, j'ai ...

export default { 
    name: 'app', 
    data: function() { 
     return { 
      is_loading: true 
     } 
    }, 
    directives: { 
     do_something: { 
      bind: function(el, binding, vnode) { 
       // Change the is_loading property 
      } 
     } 
    } 
} 

Au début, je pensais que je pouvais faire this.is_loading = false mais this est undefined.

Répondre

3

Pour se référer à this dans une directive que vous pouvez simplement utiliser vnode.context, donc en vous la directive que vous auriez:

do_something: { 
     bind: function(el, binding, vnode) { 
      // same as this.is_loading in a directive 
      vnode.context.is_loading = false; 
     } 
    } 

Ensuite, dans votre balisage que vous feriez:

<div v-do_domething></div> 

Voici le jsFiddle : https://jsfiddle.net/3qvtdgyd/

+0

Travaillé parfaitement, à votre santé! – KeironLowe

+0

Les docs disent de traiter tout sauf 'el' en lecture seule. https://vuejs.org/v2/guide/custom-directive.html Existe-t-il une autre façon de procéder? – Ashbury

+0

Hmm. Je dirais que ce n'est pas une modification dans le sens auquel les docs se réfèrent, c'est juste une référence à l'instance de Vue, exactement la même chose que de référencer une instance de vue depuis l'extérieur de l'instance elle-même. –