我在获取传递给指令以在 DOM 更新时更新的数据时遇到问题。该指令突出显示 sidenav 上的活动选项卡,与它们在页面上滚动到的位置相关。这是我所做的一个小提琴示例。
在我的本地站点上,有很多部分有条件地显示或隐藏,用户可以并且可能经常更改此设置。所以这会改变我存储在 中的元素 ID 的位置resultsSections
。当位置发生变化时,它们不会在指令中更新。
<script type="text/javascript">
$scope.getResultsSectionPosition = function () {
var resultsSections = {};
$('.results-heading').each(function () {
resultsSections[this.parentNode.id] = $(this).offset().top;
});
console.log(resultsSections);
return $scope.resultsSections = resultsSections;
}
$scope.getResultsSectionPosition();
</script>
我通过调用重新初始化了本地站点$scope.getResultsSectionPosition()
- 新的偏移量存储在 中resultsSections
,但指令仍然保持初始值。如何强制指令使用最活跃的数据?
myApp.directive('navActive', function () {
return function(scope, element, attrs) {
var height = $(window).height(),
section = 0;
$(window).bind("scroll", function() {
var position = $(this).scrollTop();
for (section in scope.resultsSections) {
if (position + height - 50 >= scope.resultsSections[section]) {
$('li').removeClass('results-nav-active');
$('#nav_' + section).addClass('results-nav-active');
};
};
});
};
})
我试过使用scope.$watch('resultsSections", function(){...})
但没有成功。