2015-11-10 72 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"/>