À l'aide d'une directive à l'intérieur d'une ng-repeat, et un mystérieux pouvoir de la portée '@'

Si vous préférez voir la question dans le code de travail, commencez ici: http://jsbin.com/ayigub/2/edit

Considérer cette presque l'équivalent de manières d'écrire un simple direcive:

app.directive("drinkShortcut", function() {
  return {
    scope: { flavor: '@'},
    template: '<div>{{flavor}}</div>'
  };
});

app.directive("drinkLonghand", function() {
  return {
    scope: {},
    template: '<div>{{flavor}}</div>',
    link: function(scope, element, attrs) {
      scope.flavor = attrs.flavor;
    }
  };
});

Lorsqu'il est utilisé par eux-mêmes, les deux directives de travail et se comportent de façon identique:

  <!-- This works -->
  <div drink-shortcut flavor="blueberry"></div>
  <hr/>

  <!-- This works -->
  <div drink-longhand flavor="strawberry"></div>
  <hr/>

Toutefois, lorsqu'il est utilisé à l'intérieur d'une ng-repeat, seul le raccourci version fonctionne:

  <!-- Using the shortcut inside a repeat also works -->
  <div ng-repeat="flav in ['cherry', 'grape']">
    <div drink-shortcut flavor="{{flav}}"></div>
  </div>
  <hr/>

  <!-- HOWEVER: using the longhand inside a repeat DOESN'T WORK -->      
  <div ng-repeat="flav in ['cherry', 'grape']">
    <div drink-longhand flavor="{{flav}}"></div>
  </div>

Mes questions sont:

  1. Pourquoi le longhand version fonctionne pas à l'intérieur d'une ng-repeat?
  2. Comment pourriez-vous faire la main version de travail à l'intérieur d'une ng-repeat?
InformationsquelleAutor Jonah | 2013-05-11