我在使用angular和ui-router的许多项目中遇到过这个问题。
我有一个指令,我只想获得它的大小/位置或其包含元素的大小/位置。在我的指令中,它是在ui-router视图中呈现的,我附加了一个控制器,当我尝试获取大小时,它总是为零。
element.position() -> Object {top: 0, left: 0}
element.offset() -> Object {top: 0, left: 0}
在我的指令中我有这个:
templateUrl: 'some-html-file',
link: function (scope, elem, attrs, someController) {
someController.init(elem);
}
someController
中的
this.init = function (element) {
$scope.element = element;
console.log($scope.element.position());
console.log($scope.element.offset());
}
我不确定如何获得指令的位置和大小。有什么想法吗?这与ui-router有关,或者这与使用指令的角度有关?我猜它是一个时间问题 - 尝试在dom完成角度之前得到关于dom的信息?任何帮助赞赏!
答案 0 :(得分:1)
这种与风格相关的例程需要推迟。有些事情在link
运行时并没有发生(首先,孩子的父母link
precedes。通常你必须这样做
link: function (scope, elem, attrs, someController) {
$timeout(function () {
someController.init(elem);
});
}
同样,其他指令会将某些内容推迟到下一个摘要中,有时您需要$timeout
非零延迟才能使其正常工作。