AngularJS, how to bind a variable to concatenation of two other bound variables?

后端 未结 4 2332
情书的邮戳
情书的邮戳 2021-02-20 09:01

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,

相关标签:
4条回答
  • 2021-02-20 09:07

    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

    0 讨论(0)
  • 2021-02-20 09:10

    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">
    
    0 讨论(0)
  • 2021-02-20 09:12

    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;
        }
    }
    
    0 讨论(0)
  • 2021-02-20 09:27

    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>
    
    0 讨论(0)
提交回复
热议问题