2016-01-12 16 views
12

Ich versuche, die neue Methode component() in angular 1.5 zu verwenden. Momentan habe ich wenig Informationen darüber gefunden, wie man es benutzt. Die eckigen Dokumente erwähnen es auch nicht wirklich.

Ich versuche, den Bereich oder ein Objekt aus dem Bereich an die Komponente zu übergeben, die im Vorlagenabschnitt der Komponente verwendet werden soll, aber die einzigen beiden Parameter, die ich weitergeben kann, sind $ element und $ attrs. Ich habe versucht, das Objekt durch ein Attribut in der HTML zu übergeben, aber alles, was ich bekam, war die Zeichenfolge des Namens der Objekte.

Ich habe versucht, es Einstellung als Variable auf diese Weise dargestellt werden

my-attr="item.myVal" 
my-attr="{item.myVal}" 
my-attr="{{item.myVal}}" 

jedes Mal, wenn ich noch die Stringliteral und nicht der Wert der Variablen erhalten. Wie kann ich einstellen, dass es als Variable behandelt wird?

Ich habe versucht, die Daten über die neuen Bindungen zu erfassen: {} aber meine Vorlage: {} hatte dann keinen Zugriff auf die Variablen.

Hier ist meine Komponente, wie es jetzt ist:

export var ItemListAction = { 
    controller: 'PanelCtrl as itemCtrl', 
    isolate: false, 
    template: ($element: any, $attrs: any): any=> { 
     var myVal: any = $attrs.myAttr; // returns "item.myVal" 
     var listAction: string = compileListAction(); 
     return listAction; 
    } 
}; 

Hier meine Komponente in HTML ist

<panel-item-list-action my-attr="item.myVal"></panel-item-list-action> 

Dies ist die Winkelmodul Erklärung für die Komponente: angular.module('Panel', []).component('panelItemListAction', ItemListAction)

Antwort

6

Vorlagen don Ich brauche keinen Spielraum. Template-Funktionen geben HTML zurück. Sie können $ scope wie immer in den Controller injizieren.

Dies ist, was die AngularJS Blog sagt über Komponenten:

module.component

Wir erstellten eine simple Art und Weise Komponente Richtlinien zur Registrierung. Komponenten sind im Wesentlichen spezielle Arten von Direktiven, die an ein benutzerdefiniertes Element (etwa <my-widget></my-widget>) mit einer zugehörigen Vorlage und einigen Bindungen gebunden sind. Nun, durch die .component() -Methode in AngularJS mit 1.5 können Sie eine wiederverwendbare Komponente mit sehr wenigen Zeilen Code erstellen:

var myApp = angular.module("MyApplication", []) 
myApp.component("my-widget", { 
    templateUrl: "my-widget.html", 
    controller: "MyWidgetController", 
    bindings: { 
    title: "=" 
    } 
}); 

Um mehr über die AngularJS 1.5 Komponentenmethode zu erfahren lesen Sie bitte Todd Mottos Artikel: http://toddmotto.com/exploring-the-angular-1-5-component-method/

- http://angularjs.blogspot.com/2015/11/angularjs-15-beta2-and-14-releases.html

+0

Vielen Dank für die Antwort, ist es eine Möglichkeit, den Umfang zuzugreifen, ein Objekt oder Variable i nside die Vorlage: {} Eigenschaft? Der Blog erwähnt das nicht – appthat

+1

Vorlagen brauchen $ Scope nicht. Template-Funktionen geben HTML zurück. Sie können $ scope wie immer in den Controller injizieren. – georgeawg

+0

also außerhalb des Bereichs zu isolieren, ist component() ähnlich wie ng-include? – appthat

Verwandte Themen