注意AngularJS中的dom元素

注意AngularJS中的dom元素,angularjs,Angularjs,我正在寻找一种纯angularJS方法,以便在呈现特定dom元素后调用控制器方法。我正在实现一个点击后退按钮的场景,所以我需要在渲染后滚动到一个特定的元素。我正在使用 更新:我的控制器的外观: $scope.item_ready=function(){ return document.getElementById($scope.item_dom_id).length; }; $scope.$watch('item_ready', function(new_value, old_value

我正在寻找一种纯angularJS方法,以便在呈现特定dom元素后调用控制器方法。我正在实现一个点击后退按钮的场景,所以我需要在渲染后滚动到一个特定的元素。我正在使用

更新:我的控制器的外观:

$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
});
谢谢阅读这篇文章

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


但是,不要使用$emit,而是运行您的函数…这样您就不必依赖$watch。使用它并像一个符咒一样工作…

一个你可以做的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)

  });
}

DOM元素是ng repeat的一部分还是它本身?你看了吗?@Likwid_T是的,列表是通过ng repeat填充的。@GiliarPerez我看到了。我不确定这段代码是如何工作的,但我第一次尝试的是,从控制器我有一个方法加上一个手表。请看我的更新