2015-01-26 65 views
0

在一个html表中,我有一个使用ng-repeat构造的行的列表。在这些行内我有一个单选按钮,它使用jquery来改变样式。风格是通过使用这个jQuery应用...我应该把这个jQuery内部的角度控制器?

<script> 
$(document).ready(function() { 
$('.i-checks').iCheck({ 
checkboxClass: 'icheckbox_square-green', 
radioClass: 'iradio_square-green' 
}); 
}); 
</script> 

当我把在页面的代码,单选按钮造型不起作用。但是,如果我把代码中的表行中 - 它的工作...

<div ng-controller="supplierController" class="row"> 
<div class="col-lg-6 m-t-m"> 
<div class="ibox float-e-margins"> 
    <div class="ibox-title"> 
     <h5>Price results </h5> 
    </div> 
    <div class="ibox-content"> 

     <table class="table table-striped"> 
      <thead> 
      <tr> 
       <th>Vendor</th> 
       <th>Details</th> 
       <th></th> 
      </tr> 
      </thead> 
      <tbody> 
      <tr ng-repeat="supplier in suppliers.prices"> 
       <td>{{ supplier.supplier_name }}</td> 
       <td>£{{ supplier.price }}</td> 
       <td> 
        <div class="radio i-checks"><label> <input 
type="radio" name="a"> <i>this</i></label> 
<script> 
      $(document).ready(function() { 
       $('.i-checks').iCheck({ 
        checkboxClass: 'icheckbox_square-green', 
        radioClass: 'iradio_square-green' 
       }); 
      }); 
     </script> 

</div> 

       </td> 
      </tr> 
      </tbody> 
     </table> 
    </div> 
</div> 

这工作 - 但显然它的一个可怕的想法,因为jQuery是呈现每一行。所以我的问题是,这个代码放在哪里是最好的地方,所以它也可以工作?我应该把它放入控制器吗?

道歉,如果我不清楚,我是Angular的新手。

非常感谢

+0

如果它与dom交互(在这种情况下,这是真的)它应该在一个指令。到目前为止,我看到的唯一例外是创建服务来处理对话或警报。 – 2015-01-26 22:39:41

回答

1

公正的插件部分指令是真的很容易引发一起

angular.module('YourApp').directive('iChecks', function() {  
    return { 
     restrict: 'C', // for class in markup 
     link: function (scope, element, attrs) { 
      // element is jQuery object (see note below) 
      element.iCheck({ 
       checkboxClass: 'icheckbox_square-green', 
       radioClass: 'iradio_square-green' 
      }); 
     } 
    } 
}); 

将要求您之前在页 angular.js包括的jquery.js 。当你这样做时angular.element使用完整的jQuery库。

接下来的步骤是添加行为。请注意,任何修改示波器的事件都需要使用scope.$apply()来告诉角度运行摘要循环

+0

完美!那工作。谢谢 – 2015-02-25 16:58:55

0

正如您所说的正确,您所做的是一个可怕的想法。正如凯文在评论中已经说过的那样,你应该创建一个指令。

我创建了一个小小的要点来启用任意的JQuery插件。

https://gist.github.com/ameyms/4f3a5d6a8d329609d44e

PS:我没有测试出来,所以不知道它的工作原理!

+1

只是一个建议,添加使用视图的要点。 – charlietfl 2015-01-26 23:22:21

+1

增加使用。 https://gist.github.com/ameyms/4f3a5d6a8d329609d44e – Amey 2015-01-26 23:32:07