2017-08-25 57 views
2

私はプロジェクトでrequirejs、angularamd、およびui.bootstrapを使用しています。ポップアップフォームの場合、私はui.bootstrapから$ uibModalを持っています。しかし、私は解決からパラメータ "items"を渡すことはできません。どのように動的に解決したコントローラのパラメータを注入できますか?動的パラメータを持つAngularjs動的コントローラ

function open(size, parentSelector) { 
     var parentElem = parentSelector ? 
      angular.element($document[0].querySelector('.grid ' + parentSelector)) : undefined; 

     var modalInstance = $uibModal.open({ 
      animation: vm.animationsEnabled, 
      ariaLabelledBy: 'modal-title', 
      ariaDescribedBy: 'modal-body', 
      size: size, 
      appendTo: parentElem, 
      templateUrl: 'Views/Shared/ColSetting.html', 
      resolve: { 
       load: ['$q','$rootScope',function ($q, $rootScope) { 
        var loadController = "Views/Shared/ColSettingController"; 
        var deferred = $q.defer(); 
        require([loadController], function() { 
         deferred.resolve(items); 
         $rootScope.$apply(); 
        }); 
        return deferred.promise; 
       }] 
      } 
     }); 

これは私が電話したいコントローラです。

'use strict'; 

define(['application-configuration', 'ajaxService'], function (app) { 
function ColSettingController(items) { 
    var vm = this; 

    //vm.content = $rootScope.content; 

    vm.ok = function() { 
     //$uibModalInstance.close(vm.selected.item); 
    }; 

    vm.cancel = function() { 
     //$uibModalInstance.dismiss('cancel'); 
    }; 
} 

app.register.controller("ColSettingController", ColSettingController); 
}); 

答えて

0

ui.bootstrapによれば、resolveプロパティは、マップオブジェクトです。

  • キーから{string}:地図オブジェクトは、キー/値ペアが含まれているコントローラに注入される依存性の名前。
  • 工場 - {string|function}: の場合は、サービスのエイリアスです。 それ以外の場合はfunctionとなり、それが挿入され、戻り値は依存関係として扱われます。結果が約束の場合、コントローラーがインスタンス化され、その値がコントローラーに注入される前に解決されます。あなたのケースでは

は、あなたがloadを使用しているが、あなたのコントローラがitemsが注入されることを期待、私はそれはそれは右、itemsを見つけることができないと言って失敗したと仮定しますか?あなたが注射しているものがloadであるからです。

resolveloadには、itemsのプロパティの名前を変更する必要があります。

resolve: { 
    //change 'load' for 'items' here 
    items: [....rest of your code goes here....] 

また、コントローラ/コンポーネントなどを宣言する前にこのような何かプロパティ$injectを使用することをお勧めします。

function ColSettingController(items) { 
    //some code here 
} 

ColSettingController.$inject = ['items']; 

app.register.controller("ColSettingController", ColSettingController); 

は、それが

+0

がたくさんありがとうございましたお役に立てば幸いです。今私はそれを得た。 :+) –

+0

@AungThanOo答えが参考になった場合、またはあなたの問題を解決するために+1を投票したこと、またはそれを受け入れることを検討してください。 –

+0

投票しました、私はそれを知っています、遅れて申し訳ありません、ありがとうございます。 –

関連する問題