Tôi có HTML sau với phần tử ngRepeat:
![]()
Tôi muốn sử dụng trong đógóc cạnh.element
dựa trênNHẬN DẠNG
Thực hiện lựa chọn của bạn như sau:
Angular.element('#animation-image-' + Math.floor($scope.animation.frameImage));
TRONG $scope.animation.frameImage
Làm tròn xuống một số nguyên. Tôi có thể thấy rằng tôi đang sử dụng bộ chọn chính xác (ví dụ:'#hoạt hình-hình ảnh-1'
là bộ chọn được tải ban đầu) và khi tôi thay đổi $scope.animation.frameImage
Sử dụng thanh trượt, hiệu quả là hoàn hảo.
Vấn đề làKhi tải trang, hãy trả lạigóc cạnh.element
Đối tượng làkhông xác định
. Bây giờ, tôi nghĩ điều này là do ng-repeat chưa được phổ biến. Vì vậy, tôi đã đưa vào HTML ở trên ng-lặp lại-nghe
Các chỉ thị sau đã được thêm vào:
.directive('ngRepeatListener', function() {
hàm trả về (phạm vi) {
if(scope.$last) {
phạm vi.$emit('NGREPEATCOMPLETE');
}
}
Tôi sử dụng nó như thế này:
$scope.$on('NGREPEATCOMPLETE', function() {
console.log(angular.element('#animation-image-1'));
};
Nó thực sự được gọi vào một lúc nào đó (ai biết được liệu đó có phải là thời điểm thích hợp hay không).
Tại sao điều này không hoạt động? Làm thế nào tôi có thể sửa nó?
câu trả lời hay nhất
ngRepeat sẽ không hiển thị trước giai đoạn kết xuất. Để truy cập một phần tử thông qua Angular.element() bạn có thể sử dụng $evalAsync:
$scope.$evalAsync(function() { Angular.element(...);});
$timeout cũng hoạt động nhưng nó kích hoạt thông báo sau $timeout. Nếu bạn muốn truy cập DOM đã chuẩn bị sau khi kết xuất và không muốn kích hoạt một thông báo khác sau đó, hãy sử dụng $evalAsync.
[biên tập]
Như @maurycy đã đề cập, $timeout có tham số thứ hai để tránh kích hoạt thông báo khác:
$timeout(function() {...}, 0, false);
Về javascript - không thể chọn bằng cách sử dụng Angular.element bên trong ng-repeat, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/34679995/