2014-02-14 6 views
9

Ich verwende Typoskript mit eckigen und versuchen, eine benutzerdefinierte Anweisung zu erstellen. Ich versuche, alle meine Parametertypen anzugeben, bin mir aber nicht sicher, welchen Typ das Objekt hat, das den $ -Elementparameter durchläuft. Ist es JQuery-Typ? Oder irgendein Elementtyp?Welcher Objekttyp ist der Instanzelementparameter, der in die Linkfunktion einer Winkelanweisung übergeben wird?

Im Anweisung Code möchte ich $ Element mit einem d3 Selektor verwenden. (d. h. d3.select ($ element)) Zur Zeit funktioniert die d3 selection-Anweisung nicht, weil der Elementtyp $ nicht von d3 erwartet wird. (Ich verwende eine Typoskript Schnittstelle für d3 als auch.)

var directiveDefinitionObject : ng.IDirective = { 
     restrict: 'E', 
     replace: false, 
     scope: { data: '=chartData' }, 
     link: ($scope: ICustomScope, $element: <WHAT_TYPE?>) => { 
      d3.select($element); // d3.select(node) 
     } 
    }; 

Antwort

9

$element in der link Funktion einer Richtlinie hat den Typ ng.IAugmentedJQuery. Wenn Sie jQuery einschließen, erhalten Sie die jQuery-Funktionen unter $element, ohne dass jQuery dann Angular jqLite bereitstellt. See here für weitere Informationen.

Die link Funktion in ng.IDirective ist definiert als:

link?: (scope: IScope, 
     instanceElement: IAugmentedJQuery, 
     instanceAttributes: IAttributes, 
     controller: any, 
     transclude: ITranscludeFunction 
     ) => void; 
+0

Dank! In meiner Version von angular.d.ts ist die Link-Definition tatsächlich so: Link ?: (Umfang: ISCOPE, instanceElement: alle, instanceAttributes: IAttributes, Controller: any ) => void; Deshalb konnte ich den Typ nicht herausfinden. Mit IAugmentedJQuery konnte ich "d3.select ($ element [0])" korrekt ausführen. Welcher Typ ist $ element [0]? Gibt es eine Möglichkeit, aus der Definition von IAugmentedJQuery zu unterscheiden? – Michelle

+0

Ich sollte meine Frage klären. Die Definition, die ich für IAugmentedQuery habe, ist die Schnittstelle IAugmentedJQuery erweitert JQuery { // TODO: Ereignisse, wie zu definieren? // $ destroy suchen (selector: string): IAugmentedJQuery; find (Element: any): IAugmentedJQuery; find (obj: JQuery): IAugmentedJQuery; Controller (Name: Zeichenfolge): any; Injektor(): any; scope(): IScope; inheritedData (Schlüssel: Zeichenfolge, Wert: beliebig): JQuery; inheritedData (obj: {[Schlüssel: Zeichenfolge]: any;}): JQuery; inheritedData (Schlüssel ?: Zeichenfolge): any; } – Michelle

+0

Woher wissen Sie, dass Sie [0] darauf verwenden können? Woher weißt du, dass das ein Array ist, wenn du diese Definition betrachtest? Ich bin neu in Typoskript und damit ich diese Art von Frage in Zukunft nicht stellen muss, würde ich gerne wissen, wie ich diese Typen selbst herausfinden kann. Gleiches gilt für den SVGSVGElement-Typ, von dem Sie sagten, dass er von d3.select erwartet wird. Woher weißt du das? Die d3-Dokumentation sagt nur, dass sie einen "Knoten" erwartet. https://github.com/mbostock/d3/wiki/Selections#wiki-d3_select – Michelle

Verwandte Themen