注意AngularJS中的dom元素

时间:2015-05-15 17:05:23

标签: angularjs

我正在寻找一种纯粹的angularJS方法来在渲染特定的dom元素时调用控制器方法。我实现了后退按钮点击的场景,所以我需要在渲染后滚动到特定元素。我使用http://mobileangularui.com/docs/#scrollable

更新:我的控制器如何显示:

$scope.item_ready=function(){
    return document.getElementById($scope.item_dom_id).length;
};
$scope.$watch('item_ready', function(new_value, old_value, scope){
    //run once on page load, and angular.element() is empty as the element is not yet rendered
});

由于

2 个答案:

答案 0 :(得分:0)

阅读这篇文章Calling a function when ng-repeat has finished

但是不要查看接受的答案,使用@Josep的第三个答案,使用过滤器迭代所有重复项并在$ last属性返回true后调用该函数。

然而,不是使用$ emit,而是运行你的功能......这样你就不必依赖$ watch了。使用它并像魅力一样......

答案 1 :(得分:0)

你可以做一个hack,我强调 hack ,但有时它只是你需要的是观察DOM的变化并在DOM没有时执行一个函数更改为 500ms ,这被视为公平值,表示DOM已加载。此代码如下所示:

// HACK: run this when the dom hasn't changed for 500ms logic
var broadcast = function () {};

if (document.addEventListener) {

  document.addEventListener("DOMSubtreeModified", function (e) {
    //If less than 500 milliseconds have passed, the previous broadcast will be cleared.
    clearTimeout(broadcast)
    broadcast = $window.setTimeout(function () {
      //This will only fire after 500 ms have passed with no changes
      // run your code here
    }, 10)

  });
}