98

userNameログインしたユーザーのクリックのリストからuserNameを twitter bootstrapに渡したいですmodalangularjsを介してデータがレンダリングされるangularjsでgrailsを使用しています。

構成

私のgrailsビューページencouragement.gsp

<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>

私のencourage/_encouragement_modal.gsp

<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>

では、どうすれば に渡すことができuserNameますencouragementModalか?

4

8 に答える 8

58

もう1つは機能しません。ドキュメントによると、これはあなたがすべき方法です。

angular.module('plunker', ['ui.bootstrap']);
var ModalDemoCtrl = function ($scope, $modal) {

    var modalInstance = $modal.open({
      templateUrl: 'myModalContent.html',
      controller: ModalInstanceCtrl,
      resolve: {
        test: function () {
          return 'test variable';
        }
      }
    });
};

var ModalInstanceCtrl = function ($scope, $modalInstance, test) {

  $scope.test = test;
};

plunkr を参照

于 2013-10-29T14:33:56.977 に答える
51

または、新しいスコープを作成し、scope オプションを介してパラメーターを渡すことができます

var scope = $rootScope.$new();
 scope.params = {editId: $scope.editId};
    $modal.open({
        scope: scope,
        templateUrl: 'template.html',
        controller: 'Controller',
    });

モーダル コントローラーで $scope を渡すと、itemsProvider や名前を付けた解決策を渡す必要はありません。

modalController = function($scope) {
    console.log($scope.params)
}
于 2014-03-30T10:54:25.723 に答える
24

また、モーダルのインスタンスを持つ新しいプロパティを追加してモーダル コントローラーに取得することで、モーダル コントローラーにパラメーターを簡単に渡すこともできます。例えば:

以下は、モーダル ビューを開きたいクリック イベントです。

 $scope.openMyModalView = function() {
            var modalInstance = $modal.open({
                    templateUrl: 'app/userDetailView.html',
                    controller: 'UserDetailCtrl as userDetail'
                });
                // add your parameter with modal instance
                modalInstance.userName = 'xyz';
        };

モーダル コントローラー:

angular.module('myApp').controller('UserDetailCtrl', ['$modalInstance',
                function ($modalInstance) {
                    // get your parameter from modal instance
                    var currentUser = $modalInstance.userName;
                    // do your work...
                }]);
于 2015-06-03T06:50:11.880 に答える
17

以下のようにしてみました。

Encourageボタンでng-clickangularjs コントローラーを呼び出し、

               <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>

angularjsコントローラーから設定userNameしました。encouragementModal

    /**
     * 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' ];

userName上のangularjsコントローラーから値を取得するためにplace()を提供しました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>

それはうまくいき、私は自分自身に敬礼しました。

于 2013-09-02T18:12:09.567 に答える
10

そのニーズにはAngular UIを実際に使用する必要があります。確認してください: Angular UI ダイアログ

簡単に言うと、Angular UI ダイアログでは、 を使用してコントローラーからダイアログ コントローラーに変数を渡すことができますresolve。「from」コントローラーは次のとおりです。

var d = $dialog.dialog({
  backdrop: true,
  keyboard: true,
  backdropClick: true,
  templateUrl:  '<url_of_your_template>',
  controller: 'MyDialogCtrl',
  // Interesting stuff here.
  resolve: {
    username: 'foo'
  }
});

d.open();

そして、あなたのダイアログコントローラで:

angular.module('mymodule')
  .controller('MyDialogCtrl', function ($scope, username) {
  // Here, username is 'foo'
  $scope.username = username;
}

編集: ui-dialog の新しいバージョン以降、解決エントリは次のようになります。

resolve: { username: function () { return 'foo'; } }

于 2013-09-02T16:06:38.903 に答える