Search code examples
javascripttwitter-bootstrapgrailsangularjs

How to pass parameters to a modal?


I want to pass the userName from a list of userNames a logged in user clicks on to twitter bootstrap modal. I am using grails with angularjs, where data is rendered via angularjs.

Configuration

My grails view page encouragement.gsp is

<div ng-controller="EncouragementController">
    <g:render template="encourage/encouragement_modal" />
    <tr ng-cloak
                  ng-repeat="user in result.users">
                   <td>{{user.userName}}</rd>
                   <td>
                      <a class="btn btn-primary span11" href="#encouragementModal" data-toggle="modal">
                            Encourage
                       </a>
                  </td>
                </tr>

My encourage/_encouragement_modal.gsp is

<div id="encouragementModal" class="modal hide fade">
  <div class="modal-header">
    <button type="button" class="close" data-dismiss="modal"
      aria-hidden="true">&times;</button>
    <h3>Confirm encouragement?</h3>
  </div>
  <div class="modal-body">
      Do you really want to encourage <b>{{aModel.userName}}</b>?
  </div>
  <div class="modal-footer">
    <button class="btn btn-info"
      ng-click="encourage('${createLink(uri: '/encourage/')}',{{aModel.userName}})">
      Confirm
    </button>
    <button class="btn" data-dismiss="modal" aria-hidden="true">Never Mind</button>
  </div>
</div>

So, how can I pass userName to encouragementModal?


Solution

  • I tried as below.

    I called ng-click to angularjs controller on Encourage button,

                   <tr ng-cloak
                      ng-repeat="user in result.users">
                       <td>{{user.userName}}</rd>
                       <td>
                          <a class="btn btn-primary span11" ng-click="setUsername({{user.userName}})" href="#encouragementModal" data-toggle="modal">
                                Encourage
                           </a>
                      </td>
                    </tr>
    

    I set userName of encouragementModal from angularjs controller.

        /**
         * Encouragement controller for AngularJS
         * 
         * @param $scope
         * @param $http
         * @param encouragementService
         */
        function EncouragementController($scope, $http, encouragementService) {
          /**
           * set invoice number
           */
          $scope.setUsername = function (username) {
                $scope.userName = username;
          };
         }
        EncouragementController.$inject = [ '$scope', '$http', 'encouragementService' ];
    

    I provided a place(userName) to get value from angularjs controller on encouragementModal.

    <div id="encouragementModal" class="modal hide fade">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal"
          aria-hidden="true">&times;</button>
        <h3>Confirm encouragement?</h3>
      </div>
      <div class="modal-body">
          Do you really want to encourage <b>{{userName}}</b>?
      </div>
      <div class="modal-footer">
        <button class="btn btn-info"
          ng-click="encourage('${createLink(uri: '/encourage/')}',{{userName}})">
          Confirm
        </button>
        <button class="btn" data-dismiss="modal" aria-hidden="true">Never Mind</button>
      </div>
    </div>
    

    It worked and I saluted myself.