Angularjs指令更新DOM属性值的更改

Pat*_*ick 6 javascript angularjs

我一直在为Angularjs开发一个scrollspy模块.我遇到的问题是,如果页面处理动态内容,则滚动数据(元素位置)很快就会过时.处理这类问题的angularjs方法是什么?

任何执行DOM操作$broadcast的指令是否应该是scrolllspy模块寻找的事件 - 允许它重构其位置数据?

如果scrollspy模块每隔x秒检查一次scrollHeight的变化$timeout吗?

甚至更好,有没有绑定,并观察DOM属性值变化的方式(属性,如offsetTop,offsetHeight,scrollHeight,没有数据属性)?

更新:为GitHub添加了代码库

Pat*_*ick 6

变异观察者似乎是所需的设施,遗憾的是它们仅受最新浏览器的支持.

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);

}
Run Code Online (Sandbox Code Playgroud)

目前正在寻找实际可行的polyfill.

编辑:如果不支持Mutation Observers,则添加轮询作为后备.