2015-11-10 108 views
3

我有一個NG重複表中的兩個日期字段,代碼如下所示:AngularJS:輸入掩碼不angularJS表工作

<tr ng-repeat="ol in orderLines"> 
    <td> 
     <input class="audioStartTime" type="text" ng-model="ol.AudioStartTime"/> 
    </td> 
    <td> 
     <input class="audioEndTime" type="text" ng-model="ol.AudioEndTime"/> 
    </td> 

就像陳述的名字,audioStartTime和audioEndTime是時間字段,所以我需要在它們上應用輸入掩碼。我用下面的代碼:

$('.audioStartTime').each(function(index) { 
    $(this).inputmask("hh:mm:ss", {placeholder: "HH:MM:SS", insertMode: false, showMaskOnHover: false}); 
}); 

我測試了這段代碼。部件完全加載後,我將它們輸入到開發工具的控制檯中,它工作得很好。但是,問題是,當我將這段代碼放入document.ready中時,這似乎不起作用。

在我看來,angularJS可能有計算ng-repeat數據後重新加載/重新渲染表格內容的機制。真的嗎?是的,我可以在哪裏放入我的輸入掩碼,以便在加載angularJS元素後完成?

回答

2

我剛剛得到了答案。這是鏈接幫助我得到我的答案:http://valve.github.io/blog/2013/08/01/jquery-inputmask-plugin-plus-angularjs/

因此,基本上使用任何jQuery插件,我應該把它放入一個指令,而不是在控制器。因此,在該指令:

assignToFirmApp.directive('inputMaskTime', function() { 
     return { 
      require: "ngModel", 
      link: function (scope, elem, attr, ctrl) { 
       $(elem).inputmask("hh:mm:ss", {placeholder: "HH:MM:SS", insertMode: false, showMaskOnHover: false}); 
       elem.on('keyup', function() 
       { 
        scope.$apply(function() 
        { 
         ctrl.$setViewValue(elem.val()); 
        }); 
       }); 
      } 
     }; 
    }); 

,並在頁面:

<input class="audioStartTime" input-mask-time="true" type="text" ng-model="ol.AudioStartTime"/>