我正在寻找一种纯粹的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
});
由于
答案 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)
});
}