2013-08-23 4 views
1

У меня есть директива, которая частично заполняется ng-повторением из родительской области, а затем слушатели прикрепляются в postLink. Однако, поскольку содержимое передается, оно недоступно/интерполировано по времени ссылки.Угловое: связывание зашифрованных шаблонов

Я бросил вместе JSFiddle example, чтобы продемонстрировать:

Шаблон:

<script type="text/ng-template" id="directive.html"> 
     <div>list item count: {{ count }} (should be {{2 + items.length }})</div> 
     <div>Transcluded content: <span ng-transclude></span></div> 
</script> 

<div ng-controller="Ctrl"> 
    <ul frag> 
     <li ng-repeat="item in items">{{ item }}</li> 
     <li>4</li> 
     <li>5</li> 
    </ul> 
</div> 

Код:

app.directive("frag", function ($http) { 
    return { 
     restrict: 'A', 
     transclude: true, 
     templateUrl: 'directive.html', 
     link: function (scope, element, attrs) { 
      scope.count = element.find("li").length; 
      console.log(element); 
     }, 
     controller: function ($scope) { 
      $scope.foundB = false; 
     } 
    }; 
}); 

В этом случае список количество элементов заканчивается как 2, а не ожидаемые 5, можно было бы ожидать пост-трансклюзии.

У кого-нибудь есть идеи, как я мог бы сделать эту работу? Я ожидал найти какое-то событие post-transclude, которое я мог бы наблюдать, и тогда только ссылку, но не смог найти его.

ответ

0

Вы можете использовать $timeout переместить код в конец очереди выполнения, после цикла дайджеста:

app.directive("frag", function ($http, $timeout) { 
    return { 
     restrict: 'A', 
     transclude: true, 
     templateUrl: 'directive.html', 
     link: function (scope, element, attrs) { 
      $timeout(function() { 
       scope.count = element.find("li").length; 
      }); 
     }, 
     controller: function ($scope, $element) { 
      $scope.foundB = false; 
     } 
    }; 
}); 

http://jsfiddle.net/pnQyA/8/

+0

Тех - Я копила с помощью '$ timeout' в качестве последнего курорт хоть! Надеюсь, что (а) я пропустил что-то очевидное, или (б) есть что-то опрятное. – Dave