4

I have requirement like this.

<label>Website Address</label>
                    <span><input type="text" class="form-factor" data-ng-model="websiteUrl"/></span>

I have the HTML code like this. Once the user enter text in website URL field I need to add prefix to the URL with http://.

If the user is entering the URL with http://. then no need add the http:// prefix.

How can i do with in AngularJS .

Please suggest

3
  • should the model contain the http:// or just your output? Commented Dec 16, 2015 at 8:59
  • Try using or creating a filter that handles all the regex checks and returns the url as you wish Commented Dec 16, 2015 at 8:59
  • whenever you are getting your output text you can easily append know ? Commented Dec 16, 2015 at 9:04

1 Answer 1

2

Ok, there is also another possibility to use a formater and parser to complete the task at the model level. I put the code in here from another solution, since the code there is hosted external:

https://stackoverflow.com/a/19482887/3641016

angular.module('app', [])
  .controller('testCtrl', function($scope) {
    $scope.input1 = "";
    $scope.input2 = "";
  })
  .filter('prefixHttp', function() {
    return function(input) {
      return input.indexOf("http://") == 0 ? input : 'http://' + input;
    };
  })
  .directive('httpPrefix', function() {
    return {
      restrict: 'A',
      require: 'ngModel',
      link: function(scope, element, attrs, controller) {
        function ensureHttpPrefix(value) {
          // Need to add prefix if we don't have http:// prefix already AND we don't have part of it
          if (value && !/^(https?):\/\//i.test(value) && 'http://'.indexOf(value) !== 0 && 'https://'.indexOf(value) !== 0) {
            controller.$setViewValue('http://' + value);
            controller.$render();
            return 'http://' + value;
          } else
            return value;
        }
        controller.$formatters.push(ensureHttpPrefix);
        controller.$parsers.splice(0, 0, ensureHttpPrefix);
      }
    };
  });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<div ng-app="app" ng-controller="testCtrl">
  <label>prefix the output
    <input ng-model="input1" />{{input1 | prefixHttp}}
  </label>
  <br/>

  <label>prefix the model
    <input ng-model="input2" http-prefix/>{{input2}}
  </label>
</div>

Sign up to request clarification or add additional context in comments.

2 Comments

Thank you for your reply.In my case I need to add http:// to the input filed when the user start to type on input filed. is it possible??
@Kichu ther is this possibility. have a look at the improved answer

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.