2017-08-25 1 views
2

J'ai utilisé requirejs, angularamd et ui.bootstrap dans mon projet. En cas de formulaire popup j'ai $ uibModal de ui.bootstrap. Mais je ne peux pas passer un paramètre "items" de la résolution. Comment puis-je injecter des paramètres pour le contrôleur qui ont été résolus dynamiquement?Contrôleur dynamique Angularjs avec paramètre dynamique

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; 
       }] 
      } 
     }); 

C'est le contrôleur que je veux appeler.

'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); 
}); 

Répondre

0

Selon ui.bootstrap, resolve propriété est un objet de la carte. L'objet de la carte contient des paires clé/valeur de:

  • clé-{string}: un nom d'une dépendance à injecter dans le contrôleur.
  • usine - {string|function}: Si string, il s'agit d'un alias pour un service. Sinon, si function, il est injecté et la valeur de retour est traitée comme la dépendance. Si le résultat est une promesse, il est résolu avant l'instanciation du contrôleur et sa valeur est injectée dans le contrôleur.

Dans votre cas, vous utilisez load, mais votre contrôleur attendent items à injecter, je suppose qu'il ne dit qu'il ne peut pas trouver items, non? C'est parce que ce que vous injectez est load.

Vous devez modifier le nom de votre propriété dans le resolve, load pour items.

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

En outre, il est recommandé d'utiliser la propriété $inject avant de déclarer contrôleurs/composants et autres, quelque chose comme ceci:

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

ColSettingController.$inject = ['items']; 

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

it helps

+0

Merci beaucoup. Maintenant j'ai compris. :-) –

+0

@AungThanOo si la réponse vous a été utile ou vous a guidé pour résoudre votre problème, en envisageant de voter +1 ou en l'acceptant. –

+0

Voté, je sais juste que, désolé pour le retard et merci. –