I am new to AngularJS and trying to build an AngularJS practice app, in which, the user will concatenate a url from multiple inputs, i.e. protocol, domain, path, param1, param2,
Another similar approach is to use ng-init directive to create a dynamic property which represents the concatenation of all those properties. You can call the function or just concatenate inline.
<a ng-init="urlParts.url=makeUrl()"
ng-href="urlParts.url">{{urlParts.url}}
</a>
<a ng-init="urlParts.url=urlParts.protocol + '://' + $scope.urlParts.domain..."
ng-href="urlParts.url">{{urlParts.url}}
</a>
Reference: http://www.ozkary.com/2015/03/angularjs-ng-model-concatenate-model.html
Try It: http://plnkr.co/edit/PSvwCE?p=info
Just use this binding expression to concatenation of more than two scope variables in HTML.
{{UserData.FirstName + ' ' + UserData.MiddleName + ' ' + UserData.LastName}}
If you want to do this inside any attribute, Just write like this:
<input type="text" ng-value="UserData.FirstName + ' ' + UserData.MiddleName + ' ' + UserData.LastName">
You shouldn't assign scope variables in the view (the HTML) - it's only for reading them.
To make a new variable from inputs, add a ng-model to each of them and then in the controller define a method that makes a $scope variable from them e.g.
Your HTML form:
<div ng-controller="MyCtrl">
<input type="text" ng-model="urlParts.protocol">
<input type="text" ng-model="urlParts.domain">
<!-- etc -->
<a ng-href="{{makeUrl()}}">{{makeUrl()}}</a>
</div>
JS:
function MyCtrl($scope) {
$scope.urlParts = {};
$scope.urlParts.protocol = "";
$scope.urlParts.domain = "";
// etc...
// These values will be updated when the user types in the input boxes
$scope.makeUrl = function() {
return $scope.urlParts.protocol + "://" + $scope.urlParts.domain + $scope.urlParts.path + "?" + $scope.urlParts.param1 + "&" + $scope.urlParts.param2 + "&" + $scope.urlParts.param3;
}
}
If you want to bind a dynamic url with href
then you can manipulate you URL in ng-click
or ng-mousedown
event and bind to target element.
JS:
var goToLinkedPage = function (event, basePath, param1, param2, param 3) {
var newState = basePath + "?" + param1 + "&" + param2 + "&" + param3;
jQuery(event.target).attr('href',newState);
};
HTML:
<a ng-mousedown="goToLinkedPage($event, basePath, param1, param2, param3)"> Click Here </a>