Tôi có một biến phạm vi $ scope.first_unread_id được xác định trong bộ điều khiển của tôi. Trong mẫu của tôi, tôi có:Chỉ thị AngularJS để cuộn đến một mục nhất định
<div id="items" >
<ul class="standard-list">
<li ng-repeat="item in items" scroll-to-id="first_unread_id">
<span class="content">{{ item.content }}</span>
</li>
</ul>
</div>
và chỉ thị của tôi trông giống như:
angular.module('ScrollToId', []).
directive('scrollToId', function() {
return function (scope, element, attributes) {
var id = scope.$parent[attributes["scrollToId"]];
if (id === scope.item.id) {
setTimeout(function() {
window.scrollTo(0, element[0].offsetTop - 100)
}, 20);
}
}
});
nó hoạt động, tuy nhiên, hai câu hỏi:
Có cách nào tốt hơn về nhận được "first_unread_id" ra khỏi phạm vi điều khiển vào trực tiếp hơn so với phạm vi thẩm vấn. $ parent? Điều này có vẻ hơi 'icky'. Tôi đã hy vọng tôi có thể vượt qua điều đó thông qua quan điểm trực tiếp như là một tham số w/o phải lặp lại rằng trên yếu tố bao giờ li.
Có cách nào tốt hơn để tránh sự cần thiết của cuộc gọi setTimeout() không? Nếu không có nó, nó hoạt động đôi khi - Tôi tưởng tượng do sự khác biệt về thời gian bố trí. Tôi hiểu cú pháp tôi đã sử dụng là định nghĩa một hàm liên kết - nhưng nó không rõ ràng đối với tôi nếu đó là tiền tố hoặc liên kết sau theo mặc định - và nếu điều đó thậm chí còn quan trọng đối với vấn đề của tôi.
https://docs.angularjs.org/api/ng/service/$anchorScroll – Blazemonger
có bạn kiểm tra ra khỏi AnchorScroll của Angular? [AnchorScroll Service] (https://docs.angularjs.org/api/ng/service/$anchorScroll) –