3

I have two date fields within a ng-repeat table, the code looks like this:

<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>

Just like the name stated, audioStartTime and audioEndTime are time fields, so I need to apply input mask on them. I used the following code:

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

I tested this code. After the part completely loads and I input them in the developer tool's console, it works pretty well. However, the problem is, when I put this code into document.ready, this doesn't seem to work.

It seems to me that angularJS might have a mechanism of reloading/rerendering the table content after calculating the ng-repeat data. Is that true? Is so, where can I put my input mask code so it can be done after the loading of angularJS elements?

1 Answer 1

2

I just got the answer myself. And this is the link helped me getting my answer: http://valve.github.io/blog/2013/08/01/jquery-inputmask-plugin-plus-angularjs/

So basically to use any jQuery plugin, I should be putting that into a directive than in the controller. So in the directive:

    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());
                    });
                });
            }
        };
    });

And in the page:

<input class="audioStartTime" input-mask-time="true" type="text" ng-model="ol.AudioStartTime"/>
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.