1

Ich versuche, eine Smart-table-Richtlinie aus einer benutzerdefinierten Richtlinie zu generieren Ich habe definiert:Richtlinie innerhalb einer anderen Richtlinie - Anwendungsbereich var undefined

<div ng-controller="myContrtoller"> 
    <containing-directive></containing-directive> 
</div> 

Die Richtlinie Definition:

angular.module('app') 
.directive('containingDirective', function() { 
    return { 
     restrict: 'E', 
     replace: true, 
     template: '<table st-table="collection" st-pipe="scopeFun"></table>', 
     link: function(scope, elem, attrs) { 
      scope.scopeFun = function() { 
       // solve the misteries of life 
      } 
     } 
    } 
}); 

Wie Sie sehen können, versucht meine Direktive, das Element durch die Vorlage zu ersetzen, die durch die st-pipe Direktive generiert wurde, abhängig von der ersten, kurz:

Problem:
Die st-pipe Richtlinie prüft den Umfang var stPipe wenn sie definiert ist oder nicht: if (ng.isFunction(scope.stPipe)). Dies erweist sich IMMER als undefiniert. Durch Inspektion fand ich zwei Dinge:

  1. Von der stPipe Richtlinie soll den Wert scope.stPipe sein, die mein scopeFun in meinem containingDirective ist undefined auf dem scope Objekt, sondern im scope.$parent Objekt definiert definiert ist. Wenn ich meine $scope.scopeFun innerhalb der myContrtoller definiere, habe ich kein Problem, alles funktioniert.

Lösung:
ich eine Lösung finden habe, aber ich weiß nicht, was wirklich los ist:

  1. Set replace: false im containingDirective
  2. Definieren Sie die scope.scopeFun im pre -link Funktion von containingDirective
Fragen

:

  1. Warum ist die scopeFun in dem stPipe Richtlinie scope Objekt, wenn in der Steuerung definiert und warum ist es in den scope.$parent zur Verfügung, wenn in den containingDirective definiert?
  2. Was ist wirklich los mit meiner Lösung, und ist es möglich, eine sauberere Lösung zu finden?

Antwort

0

Vom docs: so „Der Austauschprozess zum neuen alle Attribute/Klassen aus dem alten Element wandert“, was los war, war dies:

<containing-directive whatever-attribute=whatever></containing-directive> 

wurde mit

ersetzt
<table st-table="collection" st-pipe="scopeFun" whatever-attribute=whatever></table> 

und irgendwie st-Tabelle hat nicht die zusätzlichen Attribute (auch ohne Attribute überhaupt ..) genossen.
Durch die containingDirective Richtlinie Vorlage in einem anderen div Einwickeln das Problem behoben (ich jetzt replace:true verwenden):

<div><table st-table="collection" st-pipe="scopeFun"></table></div> 

Wenn jemand eine besser strukturierte Antwort wirklich

würde geschätzt