Tôi có một chỉ thị đơn giản trong đó mẫu sử dụng ng-lặp lại bên trong nó. Tôi cần chạy một số mã để khởi tạo một thành phần jquery đối với một số phần tử được tạo bởi lệnh ng-repeat. Vấn đề là nếu tôi đặt mã này trong hàm liên kết. Các ng-lặp lại đã không xây dựng những yếu tố nào được nêu ra vì vậy không có gì là instantiated.AngularJS: Liên kết đến các phần tử trong một chỉ thị sử dụng ng-repeat
App.directive('myDirective', ['$compile', '$timeout', function($compile, $timeout) {
return {
scope: {
domains: '='
},
templateUrl: '/app/partials/my_directive.html',
link: function($scope, element, attributes) {
element.find('.standard-help').tooltip('destroy');
element.find('.standard-help').tooltip({placement: 'top', trigger: 'click hover focus'});
}
};
}
Mẫu sẽ trông giống như sau. Tôi đang cố gắng đính kèm
<ul class="media-list domainList">
<li class="media" style="position:relative;" ng-repeat="domain in domains">
<a class="domainHeader" href="javascript://">
<span class="domainHeader">{{domain.tag}}</span>
</a>
<div class="media-body" style="margin-left: 52px;">
<ul class="standardsList">
<li ng-class="{ standardDisplayed: lessonLayout == 'standards' }" ng-hide="standard.lessons.length == 0" ng-repeat="standard in domain.standards">
<a href="javascript://" title="{{standard.description}}" ng-show="lessonLayout == 'standards'" class="standard-help pull-right"><i class="icon-question-sign"></i></a>
<h6 ng-show="lessonLayout == 'standards'">{{standard.tag}}</h6>
<ul class="lessonsList">
<li ng-class="{ lesson: true }" ng-repeat="lesson in standard.lessons" ng-click="onLessonSelected(lesson)">
<i class="icon-lock lesson-locked"></i>
<div>{{lesson.title}}</div>
</li>
</ul>
</li>
</ul>
</div>
</li>
</ul>
Tôi đã thử sử dụng $ watch() và $ observ() để đăng ký gọi lại khi miền thay đổi và khởi tạo mã công cụ sau đó. Tuy nhiên, tôi dường như không thể gọi cho tôi vào đúng thời điểm. Bất kỳ ý tưởng những gì tôi đang mất tích?
Có lẽ bạn có thể buộc biên dịch từ chức năng liên kết. element = angular.element ($ compile (template) (scope)); – dimirc
Nếu sự cố đang chờ hiển thị dom, bạn có thể bọc các mục chức năng liên kết của mình trong khoảng thời gian chờ $. '$ timeout (function() {element.find (blabla); element.find (foofoo);}, 0)'. Nếu đây không phải là sửa chữa, thì vấn đề không nằm ở việc dựng hình dom. – rGil
Có vẻ như đây sẽ là một vấn đề phổ biến vì vậy tôi phải nghĩ rằng có những cách tốt hơn để thực hiện điều này mà không cần phải sử dụng để hack như sử dụng timeouts. – chubbsondubs