La portée de la directive AngularJS n'est pas résolue (l'erreur "attr name is not defined")

Code de la directive

mymodule.directive('eicon', function(){ return { restrict: 'E', scope: { attr: '=' }, template: "test " + attr.name } }); 

Html

 <tr ng-repeat="e in entities"> <td><eicon attr="e"></eicon></td> </tr> 

J'ai cette erreur: ReferenceError: attr is not defined . Qu'est-ce qui ne va pas?

attr est accessible dans la portée, vous pouvez donc accéder à scope.attr dans votre contrôleur ou phase de liaison, ou {{attr}} dans les modèles. Une solution simple consiste à changer votre modèle pour

 mymodule.directive('eicon', function(){ return { restrict: 'E', scope: { attr: '=' }, template: "test {{attr.name}}", link: function (scope, element, attrs) { console.log(scope.attr); }, controller: function (scope) { console.log(scope.attr); } } }); 

Étant donné que vous scope.attr propriété de portée isolée, vous devriez pouvoir accéder à scope.attr dans un modèle comme ceci:

 mymodule.directive('eicon', function(){ return { restrict: 'E', scope: { attr: '=' }, template: "test {{attr.name}}" } }); 

Demo: http://plnkr.co/edit/YZ0aPqhkMlIIwmrkKK2v?p=preview