Como sabemos, a directive do Vue.js tem 3 atributos padrões: bind,update e unbind.
No entanto, pelo processo de criação atual de novas repetições de uma directive, um comportamento interessante emerge. Vejamos no código abaixo:
<div id="content">
<div v-perm="">
Este comportamento emerge da função extend function do core do Vue.js. As cópias de object são feitas por referência.
</div>
<div v-perm="">
<a target="_blank" href="https://github.com/vuejs/vue/blob/dev/dist/vue.js#L245">Veja no código do Vue.js a função extend</a>
</div>
<div v-perm="">
</div>
<div v-perm="">
</div>
<div v-perm="">
</div>
<div v-perm="">
</div>
</div>
Vue.directive('perm',{
//O valor desta variável será reinicializado para cada nova repetição desta directive
a:0
,b:{
//O valor desta variável não será reinicializado para cada nova repetição desta directive
c:0
}
,bind:function(){
this.a++;
this.b.c++;
}
,update(n,o){
console.log("A value is: "+this.a);
console.log("C value is: "+this.b.c);
}
,unbind:function(){
}
});
new Vue({
el: function(){
return '#content';
},
data: function(){
return {
};
},
methods: {
}
});
Como resultado da execução deste código, teremos o resultado:
[pre]
A value is: 1
C value is: 1
A value is: 1
C value is: 2
A value is: 1
C value is: 3
A value is: 1
C value is: 4
A value is: 1
C value is: 5
A value is: 1
C value is: 6
[/pre]
Caso queira testar ou modificar o código acima, clique aqui.




