2017-05-29 17 views
1

私のテンプレートから、私はを使用して$uibModalをトリガーします。

すべては私が$modal.close($value)コールバック値が仕事を得ることができない、罰金、オープニング、クロージングなど

問題があるに動作します。関数自体は正常に機能し、モーダルは閉じ、約束成功関数が呼び出されます。問題は、常にundefinedを返します。


コンポーネントコントローラ

app.component('list', { 
    templateUrl: 'widgets/list.html', 
    controllerAs: '$widget', 
    controller: function($uibModal) { 

     // Add item through modal 
     this.addItem = function() { 

      // Init and open $uibModal 
      var modalInstance = $uibModal.open({ 
       component : 'modalAddItem', 
       size  : 'md' 
      }); 

      // $uibModal promise 
      modalInstance.result.then(function(params) { 
       console.log(params) 
       // ---> undefined 
      }); 
     } 
    } 
} 

モーダルテンプレート

<div class="modal-add-item"> 

    <div class="modal-body" id="modal-body"> 
     // Some template stuff here 
    </div> 

    <div class="modal-footer"> 
     <button class="btn btn-sm btn-default" ng-click="$modal.ok()">Ok</button> 
    </div> 

</div> 

モーダル成分

app.component('modalAddItem', { 
    templateUrl: 'widgets/modals/add-item.html', 
    bindings: { 
     resolve: '<', 
     close: '&', 
     dismiss: '&' 
    }, 
    controllerAs: '$modal', 
    controller: function ($scope) { 

     this.ok = function() { 
      this.close({item: 'picked item'}); 
     } 

    } 
}); 

すべて正常です。しかし、私が試してみると、close関数は常に返すundefined

答えて

3

あなたは項目の代わりに$valueを使うべきです。

this.ok = function() { 
    this.close({$value: 'picked item'}); 
} 

近い - 結果を渡し、モーダルを閉じるために使用することができる方法。 結果は、この形式で渡さなければなりません:{$値:myResult}

Angular UI bootstrap

+0

すごいああ、あなたは文字通りキーとして '$の[値]を使用する必要があり、私はそれが唯一のデモの目的のためだと思いました。どうもありがとう! –

+1

あなたは大歓迎です:)実際には角では&呼び出し元は、キーが元のキーと一致する必要がある引数としてマップを渡すことを呼び出し元が期待しています。この場合、キーを確定する角度です。どのように&バインディングの作業を見てみましょうhttps://stackoverflow.com/questions/43378614/javascript-objects-as-function-arguments-in-angular-directive-properties/43379581#43379581 – Karim

+0

ああ、私はすでに不思議だった'&'バインディングは何をしましたか?説明ありがとう。 –

関連する問題