Pregunta

esta PLUNKR lanza este error:

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

Puedo trabajar en esto, pero tengo curiosidad si esto es por diseño, y por qué (Padre soltero vs Multiple Children Thing)?No veo ninguna mención de esta restricción en la $ ng.compile docs .

¿Fue útil?

Solución

La razón por la que esto no se implementa es el rendimiento.Atraverando el DOM es mucho más rápido que revisar la rama de cada niño para una posible coincidencia.Por esta razón, la forma recomendada es permitir que el elemento infantil informe a su padre de su estado.

Tenga en cuenta que esto se realiza a través de las instancias de controlador asociadas, no a través de las directivas.

He actualizado su implotis con una Ejemplo de trabajo

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

Otros consejos

No puede requerir una directiva infantil, por lo que no sé nada en Angular lo permite esto.Solo puede requerir una directiva de padres de un niño, por

require: '^parentDirectiveName'

o una directiva de hermanos, por

require: 'siblingDirectiveName'

Entonces, sí, esto es por diseño, o al menos una falta de característica.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top