Pergunta

Esse plunkr lança este erro:

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

Posso contornar isso, mas estou curioso para saber se isso é intencional e por que (coisa de pai solteiro versus vários filhos)?Não vejo nenhuma menção a essa restrição no $ng.compile documentos.

Foi útil?

Solução

A razão pela qual isso não é implementado é o desempenho.Percorrer o DOM é muito mais rápido do que verificar cada branch filho em busca de uma possível correspondência.Por esse motivo, a forma recomendada é permitir que o elemento filho informe seu pai sobre seu status.

Observe que isso é feito através das instâncias do controlador associadas, não através das diretivas.

Eu atualizei seu plunk com um exemplo de trabalho

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

Outras dicas

Você não pode exigir uma diretiva filho, até onde sei, nada em Angular permite isso.Você só pode exigir uma diretiva pai de um filho, por

require: '^parentDirectiveName'

ou uma diretiva irmã, por

require: 'siblingDirectiveName'

Então, sim, isso ocorre intencionalmente ou, pelo menos, por falta de recurso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top