Angularjs 指令更新到 DOM 属性值的变化
Angularjs directives updating to changes in DOM attribute values
我一直在为Angularjs开发一个scrollspy模块。我遇到了一个问题,如果页面正在处理动态内容,滚动间谍数据(元素位置)很快就会过时。处理此类问题的 angularjs 方法是什么?
任何执行 DOM 操作的指令是否应该$broadcast
scrollspy 模块查找的事件 - 允许它重构其位置数据?
scrollspy模块应该每x秒检查一次滚动$timeout
高度的变化吗?
或者更好的是,有没有办法绑定和监视 DOM 属性值的变化(属性如 offsetTop
、offsetHeight
、scrollHeight
,而不是数据属性)?
更新:向 GitHub 添加了代码库
突变观察者似乎是所需的工具,不幸的是,它们仅受最新浏览器的支持。
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
if( MutationObserver ) {
for ( var i = 0; i < spyService.spies.length; i++ ) {
var spy = spyService.spies[i].scope.spy;
var target = document.getElementById(spy);
var config = {
attributes: true,
childList: true,
characterData: true,
subtree: true
};
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.warn('mutation observation');
});
}).observe(target, config);
}
}
else {
console.warn('no mutation observers here');
$interval(function() {
angular.element( document ).ready( function() {
console.log('refreshing');
});
}, 2000);
}
当前正在寻找实际有效的填充物。
编辑:添加了轮询作为备份,如果不支持突变观察者。
这样的事情应该可以工作... 不过,似乎没有使用 CSS 过渡进行更新。
scope.$watch(function(){
return elem[0].offsetLeft;
}, function(x){
console.log('ITEM AT '+x);
});
没有代码,我会在黑暗中刺伤,但我建议您每次收到$digest
电话时$rootScope
scrollspy 模块进行检查。所以使用$rootScope.$watch
.
$rootScope.$watch(function() {
// Update scrollspy data here
}
相关文章:
- 在异步函数调用过程中,当对象的属性值发生变化时,JavaScript中的对象属性值会发生什么变化
- Jquery-背景图像随select中的数据属性而变化
- JS触发的复选框's已检查属性;t动态变化
- 如何观察聚合物元素属性值从索引.html的变化
- AngularJS:当css类发生变化时,如何通过切换来更改颜色属性
- 找出 Vue.js 深度自定义指令中哪个属性发生了变化
- 角度2 - 检测属性@Input的变化
- 如何处理 redux 存储所持有的数据中不断变化的属性
- AngularJS ng 样式不随属性变化
- Angularjs 指令更新到 DOM 属性值的变化
- JS监视CSS属性的变化,如“display:none”=>“display:block”
- 使用 change() 检测属性值的变化
- IFRAME中的SRC属性随onload函数而变化
- 根据可观察到的变化更新相关属性
- 当聚合物元素中的布尔属性发生变化时,如何用sort重新运行dom repeat
- 当你在HTML5视频控制器上点击播放时,哪些变量/属性会发生变化
- 计算JavaScript对象中属性百分比的变化
- 如何使用AngularJS观察由jQuery修改的属性值的变化
- 动态检测html元素属性的变化
- 聚合物:如何关注内容的变化属性