我有一个ng重复指令,它显示一个链接列表。它工作得很好,但是我的代码也有一个javascript函数,它根据列表的尺寸来放置列表。当然,在对DOM进行数据绑定和修改之前,不知道列表的维数。如果在数据更改后立即调用该函数,那么布局计算就会跳过枪,并将列表放置为空。我想启动函数,一旦角度完成修改DOM。我怎么能这么做?
编辑:
刚尝试了ngcloak作为一种可能的解决方案,不幸的是,它不起作用。阅读ngcloak的文档,我的问题不是列表闪烁,而是放在那里,好像它是空的,然后留在那里。一旦绑定完成,我需要一种调用我的函数的方法。
发布于 2013-10-04 20:28:32
当发生数据更改时,使用$timeout服务在延迟后调用修饰符。如果由于无法正确猜测时间而超时不够可靠,则可以编写一个递归函数,在100 is这样的短暂超时之后调用它自己,以检查角是否处于摘要或应用阶段。如果它不在摘要或应用阶段,那么您可以调用放置修饰符。
发布于 2013-10-04 14:50:54
我以前做过这样的工作,创建了一个自定义指令,以便在ng-重复之外使用。所以,例如
<div ng-repeat="foo in bar" myDirective>
这使您可以在myDirective
中访问指令的作用域并检查ng-重复呈现中的最后一项。例如,这就是我对ng-重复呈现的某些元素使用同位素jquery库时所拥有的:
angular
.module('myModule')
.directive('myDirective', function ($timeout) {
return {
restrict: 'A',
link: function postLink(scope, element, attrs) {
if (attrs.ngRepeat && scope.$last) {
$timeout(function() {
$('#myContainer').isotope({
layoutMode: 'fitRows'
});
});
}
}
};
});
它与html一起使用,例如:
<div id="myContainer" ng-repeat="foo in bar" myDirective>
<div class="element">{{foo}}</div>
</div>
应该给你你想要的东西。
只需将$('#myContainer').isotope({})
替换为您想要执行的内容时,ng-重复已经完成呈现您的重复。
发布于 2014-10-28 11:54:15
似乎您正在使用砌体-like库来定位元素,如果是的话,请使用角砌体指令。也有叉子消除了jQuery。
但是无论如何,看看它,会很有用的。
https://stackoverflow.com/questions/19183049
复制相似问题