2013-12-23 25 views
0

我试图修改链接函数中某些元素的边距。指令 - 修改链接功能中的DOMD

这是我的代码:

scope.size = (($("#highlight .thumbs li").width() * $("#highlight .thumbs li").size()) + (20 * ($("#highlight.thumbs li").size() - 1))); 

elem.find(".thumbs").addClass({ width : scope.size}); 

的事情是:在链接功能scope.size-20px;

如果我把代码100毫秒延迟$timeout()函数中,我得到了真正的值,这是252px;

有一些技巧可以在渲染之后观察DOM以获取模板中宽度或元素的最终值吗?我不想用$timeout来使视图中的元素闪烁。

+1

您必须等到链接函数完成才能获取元素的大小,因为链接函数期间元素尚未插入到DOM中。但是,您不必等待100次,您可以忽略持续时间,这会在链接函数后立即执行代码。什么更好?你甚至可以使用本地'setTimeout'来设置宽度,以便不触发额外的摘要循环(如果你不需要在某处绑定scope.size)。 – Daiwei

+2

请将你的问题发布在小提琴上,让我们一起玩吧 –

+0

@戴维谢谢,我尽量没有时间使用,但仍然给我带来负面的价值。我可以在dom渲染后创建父代或子代指令来执行此代码吗? –

回答

1
link: { post : function($scope, $element, attributes, controllers, $timeout){ 
     var listener = $scope.$watch(function(){ 
      var value = ''; 
      var inputs = $element.find(':input'); 

      for(var i = 0;i < inputs.length;i++){ 
       value += ' '+inputs[i].value; 
      } 

      if(value.trim() == ''){ 
       $scope.value = $scope.text; 
      } else { 
       $scope.value = value; 
      } 
     }); 
    }} 

将你的代码添加到$ scope。$ watch(function(){// your code});

+0

所以,我解释我自己的代码。 我尝试从输入中获得真正的值,但尚未准备就绪。 但是在$范围内,$看着它的工作。 – KoIIIeY

+0

不错!有用。唯一的是我需要在获得正确的值后取消注册手表,以避免在每个摘要循环中调用手表功能。谢谢! –

+0

如果您知道正确的值后如何解析,请告诉我如何:D – KoIIIeY

相关问题