bootstrap-switch和angularjs结合使用

由于angularjs的dom操作总是先执行,导致$(input[name="switch"])找不到元素,所以使用directive自定义指令,有两种方法:

html部分:

 <my-input power="{{x.power}}" did="{{x.id}}"></my-input>

directive指令部分:

1、通过插入元素的方法

app.directive('myInput',function(factoryName){
   return{
       restrict : "AE",
       scope : {
           power  :"@",
           did : "@"
       },
       template :'<div class="switch"></div>',
       replace : true,
       link : function(scope,element,attr){
           var $input = $('<input type="checkbox" name="switch" checked>');
           $(element[0]).append($input);
           $(element[0]).children().bootstrapSwitch({
               'size':'small',
               onSwitchChange : function(target,state){
                  //state是开关的状态
               }
           })
       }
   }
})

2、通过引入外部文件的方法

 1 return{
 2         template : '<div ng-include="getElement()"></div>',
 3         scope : {
 4             dtype : '@',
 5             id : '@'
 6         },
 7         replace : true,
 8         link : function(scope,element,attr){
 9             scope.getElement = function(){
10                 if(attr.dtype == 3){
11                     return 'testchecked.html';
12                 }else{
13                     return 'testunchecked.html';
14                 }
15             };
16         }
17     }

外部文件testchecked.html为

<div class="switch" data-on="info" data-off="success">
    <input type="checkbox" name="switch" checked/>
</div>
<script type="text/javascript">
    $("input[name='switch']").bootstrapSwitch({
        'size' : 'normal',
        'onColor':'info',
        'onSwitchChange':function(target,state){

        }
    })
</script>