Skip to main content

Automatic Slashing the Date Input using Angularjs

We define a directive that will automatically slash the input field as user typein the date. The directive have following capabiltiy:
  • The directive will append slash '/' when input field has 2 or 5 characters.
  • The input will accept only 10 characters (dd/mm/yyyy).
  • Validity of date provide will not be checked.
  • When the backspace is pressed it will remove the last two character if last character is slash. Otherwise it will remove last character from the input field.
  • The input will not accept characters other than numbers (0 to 9).
Let's jump into the code. We will use bootstrap for awesome look:
HTML Code:

<div class="container" ng-app="myApp" ng-controller="myAppCtrl">
 <div class="row">
  <div class="col-sm-8 col-sm-offset-2">
   <form class="form-horizontal">
    <h4 class="bg-primary">Auto Slashing Date using Angularjs Directive</h4>
    <div class="form-group">
     <label for="date1" class="col-sm-3 control-label">Date:</label>
     <div class="col-sm-3">
      <input type="text" id="date1" class="form-control" name="date1" ng-model="date1" placeholder="dd/mm/yyyy" auto-slash>
     </div>
     <label class="col-sm-3 control-label">{{date1}}</label>
    </div> 
   </form>
  </div>
 </div>
</div>
Javascript Code:

var app = angular.module('myApp',[]);

app.controller('myAppCtrl',['$scope',function($scope){
 $scope.date1 = '';
}]);
/*This directive auto slash the input field.
It will not check the validity of date provide into dd/dd/dddd format*/
app.directive('autoSlash',[function(){
 return {
  require : 'ngModel',
  link : function(scope, iElement, iAttribute, ngModelController){
   iElement.on('keydown',function(e){
    var key = e.keyCode;
    if(key === 8){ /* If backspace is pressed*/
     if(this.value.length === 3 || this.value.length === 6){
      /*if next char to be removed is /' remove last two characters from input value*/
      this.value = this.value.substr(0, this.value.length-1);
     }
     /*remove last character*/
     this.value = this.value.substr(0, this.value.length);
    }
    /*if key pressed is not number or input got date*/
    else if( !((key > 47 && key < 58) || (key > 95 && key < 106)) 
       || this.value.length === 10){
     e.preventDefault(); //do nothing
    }
   });

   function autoSlash(veiwvalue){
    if(veiwvalue.length === 2 || veiwvalue.length === 5){
     veiwvalue += '/';
    }
    ngModelController.$setViewValue(veiwvalue);
    ngModelController.$render(); //change DOM
    if(veiwvalue.length === 10){
     return veiwvalue;
    }
   }

   ngModelController.$parsers.push(autoSlash);
  }
 };
}]);
Here we have defined an autoSlash directive. This directive has a capabily to capture the keydown event on the input field where it is attached. If the key is backspace, then it will perform necessary action as per requirment. It will prevent other key stroke other than numeric and backspace. As the key stroke happens and inputs value changes, the $parsers array function autoSlash() will fire and append the slash '/' at the end if the length of value of input field is either 2 or 5. $setViewValue() function defined on ngModelController will update the $viewValue and $render() will update the DOM.

Working Example:

Comments

  1. Thanks a lot very much for the high quality and results-oriented help. I won’t think twice to endorse your blog post to anybody who wants and needs support about this area.
    Visit Us: http://www.zerobugacademy.com/angularjs-training-in-chennai

    ReplyDelete
  2. You rock particularly for the high caliber and results-arranged offer assistance. I won't reconsider to embrace your blog entry to anyone who needs and needs bolster about this region. We are providing angularJs training in velchery.
    for more details:AngularJs training in chennai

    ReplyDelete
  3. This comment has been removed by the author.

    ReplyDelete

Post a Comment

Popular posts from this blog

Code Syntax Highlighting on Blogger using Prismjs

Prismjs is developed by Lea Verou. It is a lightweight, extensible syntax highlighter, built with modern web standards in mind. It’s used in thousands of websites, including some of those you visit daily.Today, we will see how to use the prismjs on blogger to highlight our codes. It very easy and step by step process to follow: Goto to this link and get the personalized links for prismjs or simply copy the links given below: <link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.6.0/themes/prism-coy.min.css" rel="stylesheet"></link> <script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.5.0/prism.min.js"></script> Goto Theme > Edit HTML and paste the links before the closing </head> section as shown below: Default prism.min.js file contain the functionality to highlight the code for only HTML, CSS and JS code. If you wish to use other language to highlight, you have to paste the link for that langu...

Lifecyle hooks in Angular

Each Angular component goes through a lifecycle. This is managed by the Angular itself. Angular creates a component, renders it, creates and renders its children, looks for the changes in its data-bound properties and destroys it. Angular has lifecycle hooks for each such key moment and provide a way to act accordingly when such moment happens. Directive and component have a lifecycle. For each lifecycle moment, Angular provides a lifecycle hook . The developer can hook into such moment by implementing the one or more specific lifecycle interfaces from the Angular core. Angular provide following lifecycle hooks as under: ngOnChanges ngOnInit ngDoCheck ngAfterContentInit ngAfterContentChecked ngAfterContentInit ngAfterContentChecked ngOnDestroy   Sequence of execution of the lifecycle hooks During the creation of component: Constructor ngOnChanges ngOnInit ngDoCheck ngAfterContentInit ngAfterContentChecked ngAfterContentInit ngAfterContentChecked During chang...