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

app.controller('MainCtrl', function($scope) {
  $scope.name = 'Worldasdasd';
  $scope.connectionObj = {
    connectionname: ''
  }
  
  $scope.$validateElement = function () {
    return true;
  };
});


app.directive('formInput', function($compile) {
  var setupDom = function(element) {
    var input = element.querySelector("input, textarea, select");
    var type = input.getAttribute("type");
    var name = input.getAttribute("name");
    if (type !== "radio" && type !== "checkbox") {
      input.classList.add("form-control", "fullWidth");
    }

    var label = element.querySelector("label");
    label.classList.add("errorCheck");
    return name;
  };

  var addBlurHandler = function(element, $compile, scope, form, name) {
    element.find("input").attr("data-ng-blur", "onBlurEvent('" + form.$name + "','" + name + "');");
  };

  var addMessages = function(form, element, name, $compile, scope, errorMsg) {
    var message = "<div class='row'>" +
    /*"<div class='col-md-15'>" +*/
    "<label data-ng-show='" + form.$name + "." + name + ".$dirty && " + form.$name + "." + name + ".$error.required" + "' class='errorCheck error-highlight'>" + errorMsg + "</label>" +
    /*"</div>" +*/
    "</div>";
    //angular.element(element.children()[1]).append($compile(message)(scope));

    angular.element(element.children()[1]).append(message);
    $compile(element.children())(scope);
  };

  var watchFor = function(form, name) {
    return function() {
      if (name && form[name]) {
        return form[name].$dirty && form[name].$invalid;
      }
    }
  };

  var updateFor = function(element) {
    return function(hasError) {
      if (hasError) {
        angular.element(element).find("label").addClass("error-highlight");
        angular.element(element).find("input").addClass("error-highlight");
        angular.element(element).find("textarea").addClass("error-highlight");
        angular.element(element).find("select").addClass("error-highlight");
      } else {
        angular.element(element).find("label").removeClass("error-highlight");
        angular.element(element).find("input").removeClass("error-highlight");
        angular.element(element).find("textarea").removeClass("error-highlight");
        angular.element(element).find("select").removeClass("error-highlight");
      }
    }
  };

  var link = function($compile) {
    return function(scope, element, attributes, form) {

      var initialize = function() {
        var name = setupDom(element[0]);
        var errorMsg = attributes.errorMessage;
        addBlurHandler(element, $compile, scope, form, name);
        addMessages(form, element, name, $compile, scope, errorMsg);
        scope.$watch(watchFor(form, name), updateFor(element));

      };

      initialize();

      scope.onBlurEvent = function(form, name) {
        console.log("--------------- Onblur events clickedddd");
        var formElement = scope[form][name];
        if (formElement.$pristine) {
          formElement.$setViewValue(formElement.$viewValue);
          return;
        }
        if(angular.isFunction(scope.$validateElement) && !scope.$validateElement()) {
          formElement.$setValidity("invalid", false);
        }
      };
    };
  };


  return {
    restrict: "A",
    require: "^form",
    link: link($compile),
    
  };
});
<!DOCTYPE html>
<html ng-app="plunker">

<head>
  <meta charset="utf-8" />
  <title>AngularJS Plunker</title>
  <script>
    document.write('<base href="' + document.location + '" />');
  </script>
  <link rel="stylesheet" href="style.css" />
  <script data-require="angular.js@1.2.x" src="https://code.angularjs.org/1.2.28/angular.js" data-semver="1.2.28"></script>
  <script src="app.js"></script>
</head>

<body ng-controller="MainCtrl">
  <p>Hello {{name}}!</p>
  <form name="vcnsConfigForm" novalidate>
    <div class="row" form-input error-message="An error message has occurred">
      <div class="col-md-6">
        <label>Connection Name</label>
      </div>
      <div class="col-md-9">
        <div class="row">
          <input id="connectionName" name="connectionName" dcss-pattern-mask="^[\w]*$" data-ng-model="connectionObj.connectionname" required data-ng-blur="validateConnectionName();" maxlength="128">
        </div>
      </div>
    </div>
  </form>
  <div class="row">
    <pre>{{ vcnsConfigForm.connectionName.$error | json }}</pre>
  </div>
  <div class="row">
    <pre>
         Invalid : {{ vcnsConfigForm.connectionName.$invalid }}
         Dirty : {{  vcnsConfigForm.connectionName.$dirty }}
         Pristine : {{  vcnsConfigForm.connectionName.$pristine }}   
    </pre>
  </div>
</body>

</html>
/* Put your css in here */