Quand tu crée un scope isolé avec
scope : {
lolcava : '=comment'
}
Le template de ta directive s'attend à ce que tu lui passe ce scope, sinon ça n'a pas d'intêret.
Donc dans ton partials/_comments.html :
<p><strong>{{lolcava.username}} :</strong><br>{{lolcava.content}}</p>
En mettant
app.directive('ngComment', function(){
return {
templateUrl : 'partials/_comments.html',
restrict : 'E',
scope : {
comment : '=' //ou bien comment : '=comment'
}
};
});
Cela marche effectivement, car tu as créé un <u>nouveau</u> scope comment et ta directive utilise ce scope.
Ah et ça n'a rien à voir avec le problème, mais il faut éviter de préfixer ses directives avec 'ng' car cela pourra générer des collisions avec les futures versions d'angular (imagine dans angular 2.0 ils intégrent une directive ngComment).
Depuis la doc d'angular :
" Best Practice: In order to avoid collisions with some future standard, it's best to prefix your own directive names. For instance, if you created a <carousel> directive, it would be problematic if HTML7 introduced the same element. A two or three letter prefix (e.g. btfCarousel) works well. Similarly, do not prefix your own directives with ng or they might conflict with directives included in a future version of Angular. "
Edit: pour mieux comprendre ce qui se passe : saches qu'en déclarant ta directive telle quelle, celle-ci a implicitement construit une fonction link , fonction qui est éxéctuée quand ton template a été cloné dans le dom. Elle prend, entre autre paramètre, le scope de la directive. Comme dans notre cas le scope est isolé, il aura dans ses propriétés un object qui a pour clé 'lolcava' et en valeur l'object comment passé dans la déclaration de notre directive
Un petit plunker qui illustre tout ça
http://plnkr.co/edit/PiEjRfgIuM9KLP43K0Il?p=preview
Voilà :-)