2013-03-07 39 views
1

为null,这里是我的一个向链路功能,restrict to EA and transclude is true为什么CSS margin属性值AngularJS

link : function(scope,element,attrs){ 

      element.ready(function(){ 
       var myUL = element.find('ul'); 
       console.log(myUL.css('margin')); // prints noting in console. 
      }); 
} 

我的HTML是

<body ng-app="nmrApp"> 
    <div class="app-container"> 
    <nmr-dir> 
     <ul> 
      <li><a href="#"><img src="http://placehold.it/600x300&amp;text=Image 1" alt="" /></a></li> 
      <li><a href="#"><img src="http://placehold.it/600x300&amp;text=Image 2" alt="" /></a></li> 
      <li><a href="#"><img src="http://placehold.it/600x300&amp;text=Image 3" alt="" /></a></li> 
      <li><a href="#"><img src="http://placehold.it/600x300&amp;text=Image 4" alt="" /></a></li> 
      <li><a href="#"><img src="http://placehold.it/600x300&amp;text=Image 5" alt="" /></a></li> 

     </ul> 
    </nmr-dir> 
    </div> 
</body> 

CSS:从所谓的样式外部CSS文件的加载。 css

.app-container ul{ 
    margin:0; 
    padding:0; 
    list-style: none; 
} 

当我在控制台打印myUL它给我

[ul.ng-scope, ready: function, toString: function, eq: function, push: function, sort: function…] 

var myUL = angular.element(element.find('ul')); asow not working for me。 得到堆积我做错了什么?我也在元素设置余量为0,在我的CSS这个UL

+0

你可以张贴一些是恰当的这个指令的HTML? – 2013-03-07 07:04:34

+0

风格在哪里定义?它是动态的还是从模板或外部样式表生成的? – 2013-03-07 07:08:12

回答

0

两件事情

1)可能有多个ul元素回应你的发现。

尝试使用.eq(index)或第n个子选择器进行指定。

2)尽量在包裹中找到angular.element像这样:

var myUL = angular.element(element.find('ul')); 
+0

感谢您的超级快速回答。我已经在张贴问题之前尝试了你的两个提示...没有运气:(我应该写那个。抱歉..编辑我的任务 – 2013-03-07 07:03:30

0

首先,你包括jQuery的? Angular包含jQuery的轻型版本,它没有jQuery的所有功能,计算的样式就是其中之一。其次,如果你看这里:http://api.jquery.com/css/#css1它说速记CSS属性不支持。您需要使用'margin-top'(或您感兴趣的保证金)。

工作例如:

<!doctype html> 
<html ng-app="myApp"> 
<head> 
    <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
    <script src="http://code.angularjs.org/1.0.5/angular.min.js"></script> 
    <script> 
    angular.module('myApp', []).controller('Ctrl', function($scope) { 

    }) 
    .directive('nmrDir', function() { 
     return { 
      restrict: 'E', 
      transclude: true, 
      template: '<div ng-transclude></div>', 
      link: function(scope, element, attrs) { 
       element.ready(function(){ 
        var myUL = element.find('ul'); 
        console.log(myUL.css('margin-top')); 
       }); 
      } 
     }; 
    }); 
    </script> 
    <style type="text/css"> 
    .app-container ul{ 
     margin: 10px; 
     padding: 0; 
     list-style: none; 
    } 
    </style> 
</head> 
<body ng-controller="Ctrl"> 
    <div class="app-container"> 
     <nmr-dir> 
      <ul> 
       <li><a href="#"><img src="http://placehold.it/600x300&amp;text=Image 1" alt="" /></a></li> 
       <li><a href="#"><img src="http://placehold.it/600x300&amp;text=Image 2" alt="" /></a></li> 
       <li><a href="#"><img src="http://placehold.it/600x300&amp;text=Image 3" alt="" /></a></li> 
       <li><a href="#"><img src="http://placehold.it/600x300&amp;text=Image 4" alt="" /></a></li> 
       <li><a href="#"><img src="http://placehold.it/600x300&amp;text=Image 5" alt="" /></a></li> 
      </ul> 
     </nmr-dir> 
    </div> 
</body> 
</html> 
+0

实际上我想用angularjs方式创建我自己的组件,我想使用几个angularjs项目,不想保留对jquery的任何依赖,有什么办法可以在没有jquery函数的情况下获得保证金,非常感谢你的回答,代码与我的代码有95%的相似,我没有为它做任何控制器。如果我没有错......没必要,对吧? – 2013-03-07 08:40:52

+0

不,你不需要控制器,我只是在基于控制器的例子中建立了控制器,如果你不想依赖于jQuery,你需要自己实现这个功能,但我建议你不要这样做,因为jQuery的人已经解决了一次。 – 2013-03-07 09:01:21