Domanda

Questo plunkr getta questo errore:

Error: [$compile:ctreq] Controller 'childDirective', required by directive 'parentDirective', can't be found!

Posso lavorare intorno a questo, ma sono curioso se questo è by-design, e perché (mono genitore vs più bambini per bambini)?Non vedo alcuna menzione di questa restrizione in $ ng.comPile Docs .

È stato utile?

Soluzione

Il motivo per cui ciò non è implementato è le prestazioni.Attraversare il DOM è molto più veloce del controllo di ogni filiale per bambini per una possibile corrispondenza.Per questo motivo il modo consigliato è lasciare che l'elemento figlio informi il loro genitore del loro stato.

Si noti che ciò viene effettuato tramite le istanze dei controller associati, non tramite le direttive.

Ho aggiornato il tuo sorso con un Esempio di funzionamento

angular.module('foo', [])

.directive('parentDirective', function() {
  return {
    controller: function($scope) {

      $scope.childs = {};

      this.registerChild = function(child) {
        $scope.childs[child.name] = child;
      };
    },
    link: function(scope, element, attrs) {}
  };
})

.directive('childDirective', function() {
  return {
    controller: function($scope) {},
    require: ['^parentDirective', 'childDirective'],
    link: function($scope, $element, $attrs, $ctrls) {

      var parent = $ctrls[0];
      var child = $ctrls[1];

      child.name = $attrs.childDirective;

      parent.registerChild(child);
    }
  };
});
.

Altri suggerimenti

Non è possibile richiedere una direttiva figlio, per quanto non so nulla in Angular lo consente.È possibile richiedere solo una direttiva madre da un bambino, da

require: '^parentDirectiveName'
.

o una direttiva del fratello, di

require: 'siblingDirectiveName'
.

Quindi sì, questo è per progettazione, o almeno una mancanza di funzionalità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top