$ интерполировать значения из созданной области действия ng-repeat

Ответ на этот вопрос: связывание данных AngularJS в ng-bind-html?

Что, если значения, которые я хочу интерполировать, прикреплены к создаваемой области действия ng-repeat?

myDict = {'Suggestion' : $interpolate('Vote here if you think {{player.name}} is right!')($scope) 
          ...};// $scope is wrongly passed here as 'player' is not a scope variable,

А потом

<div ng-repeat="player in players"> <span ng-bind-html="myDict['Suggestion']"></span> </div>

Можно ли сделать такую ​​вещь без специальной директивы?

1 ответ

Решение

К счастью, именно вы решаете, когда вызываете функцию:

$scope.myDict = function (scope) {
  return {'Suggestion' : $interpolate('Vote here if you think {{player.name}} is right!')(scope);
}

Тогда в вашем HTML:

<div ng-repeat="player in players">
    <span ng-bind-html="myDict({player: player})['Suggestion']"></span>
</div>

Это вызовет функцию один раз для игрока с литералом объекта, и передаст это как "область действия" для $interpolate вызов.


Тем не менее, будьте осторожны: если у вас есть тысячи записей, каждый раз при вызове функции может произойти какое-то действие удар. Единственный способ обойти это я могу использовать {{players[$index].name}} в $interpolate вызов...