Khi mở một bảng điều khiển, tôi cần phải cuộn nó trở lại ".panel-title" của cái vừa được nhấp. Tôi biết rằng tôi có thể tạo ra một chỉ thị để làm điều này như (nhận này từ this site):AngularJS/ui-bootstrap accordion - di chuyển đến đầu accordion đang hoạt động (mở) khi nhấp vào
.directive('scrollTop', scrollTop);
function scrollTop() {
return {
restrict: 'A',
link: link
};
}
function link($scope, element) {
$scope.collapsing = false;
$scope.$watch(function() {
return $(element).find('.panel-collapse').hasClass('collapsing');
}, function(status) {
if ($scope.collapsing && !status) {
if ($(element).hasClass('panel-open')) {
$('html,body').animate({
scrollTop: $(element).offset().top - 20
}, 500);
}
}
$scope.collapsing = status;
});
}
Và trong HTML tôi đã được yêu cầu sử dụng:
<div uib-accordion-group is-open="status.openPanel" scroll-top></div>
Nhưng điều này dường như không công việc. Khi bạn nhấp vào bảng điều khiển thứ hai nó sẽ mở bảng điều khiển đầu tiên và thứ hai và nó thậm chí không bao giờ cuộn lên trên cùng khi mở bảng thứ ba.
Tôi chỉ cần cuộn để quay lại "tiêu đề .panel" của bảng điều khiển đã được nhấp. Tôi nghĩ rằng nó là khá vô lý rằng điều này có vẻ là rất khó khăn để làm khi rất nhiều thời gian nội dung bảng điều khiển có thể nhận được khá dài và tôi nghĩ rằng hầu hết mọi người sẽ muốn di chuyển đến đầu của thông tin khi một bảng điều khiển được mở ra.
Tôi đã xem các bài đăng khác ở đây nhưng dường như họ không giao dịch với AngularJS. Tôi đang sử dụng "ui-bootstrap-tpls-2.1.3"
EDIT - Here is a Plunker để chơi nếu bạn muốn.
Bất kỳ trợ giúp nào được đánh giá cao.
bạn đã xem xét nghe cho môi trường 'shown' và 'sự kiện hidden' hơn là sử dụng quan sát của bạn? Tôi nghi ngờ người xem của bạn đang bắn quá sớm. Đặt một điểm ngắt trên chức năng của bạn (hoặc đặt một cảnh báo hoặc giao diện điều khiển đăng nhập ở đó, hoặc chỉnh sửa tốc độ hoạt hình bootstrap để một cái gì đó chậm hơn nhiều để phóng đại thời gian). Báo cáo lại những gì bạn tìm thấy. – adamdport