cuốn sách gpt4 ai đã làm

Không thể chọn bằng Angular.element bên trong ng-repeat

In lại Tác giả: Walker 123 Thời gian cập nhật: 27-11-2023 23:29:38 hai mươi bốn 4
mua khóa gpt4 Nike

Tôi có HTML sau với phần tử ngRepeat:






Tôi muốn sử dụng trong đógóc cạnh.elementdựa trênNHẬN DẠNGThự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/

hai mươi bốn 4 0
Xem sitemap của VNExpress