2015-04-11 11 views
6

ho una direttiva scritta da un altro sviluppatore che in fondo ha seguente configurazione:quarto argomento della funzione di collegamento

{ 
    controller: MyController, 
    controllerAs: 'myController', 
    link: function(scope, $element, attrs, ctrl) { 
     // Does some setup that requires controller 
    } 
} 

Questo funziona bene, il controller è passato come quarto argomento, Lavori Direttiva.

Ora ho deciso di rendere la direttiva più flessibile, riutilizzabile e roba del genere. Così, per direttiva di configurazione ho aggiunto

require: '?ngModel' 

Improvvisamente, ora il mio controller è mai passato a una funzione di collegamento. Non esiste una matrice per il quarto argomento, non c'è un quinto argomento, nada.

Ho provato ad aggiungere il controller alla direttiva require, ma ancora non lo trova.

Come aggiungere require e passare il controller?

risposta

8

require significa che la direttiva richiesta (ngModelController in questo caso) avrà il proprio controller inviato come quarto argomento della funzione di collegamento. Il controller predefinito è quello della direttiva, la cui funzione di collegamento è chiamata controller ma che richiede un'altra direttiva che la sovrascrive (anche se è un requisito facoltativo e la direttiva richiesta non è presente, nel qual caso il quarto argomento sarà undefined). Fortunatamente, require può essere una serie di direttive, in modo da questo funzionerà:

module.directive('myDirective', function() { 
    return { 
     controller: MyController, 
     controllerAs: 'myController', 
     require: ['myDirective', '?ngModel'], 
     link: function(scope, $element, attrs, controllers) { 
      var MyDirectiveController = controllers[0]; //this directive's controller 
      var ngModelController = controllers[1]; 
     } 
    }; 
}); 

PLUNKER

+0

Questo fa il trucco. Grazie! – Eugene

Problemi correlati