Ich suchte viel nach Decorator Erklärung mit Typoskript, aber ich finde keine vollständige Dokumentation, die ich auf meinen Zweck anwenden kann.Typescript Klasse Dekorator zu erweitert Methode
Ich fand zwei mögliche Lösung: AOP und Decorator, aber ich verstehe, dass AOP "noch nicht bereit" ist.
Die Idee ist - ich habe einige Sicherheitsbibliothek zu implementieren und ich muss eine Methode "EnterAction" und "leaveAction" aufrufen, wenn die aktuelle Seite ändern.
Ich habe eckige/ionische Livezyklus-Ereignisse für Seitenwechsel (laden/verlassen). Und ich möchte sie an einer Stelle "überschreiben", weil ich nicht jede Seite Komponente ändern möchte. (Wenn ich ein neues hinzufügen werde, werde ich vergessen, es zu implementieren).
Also Die Idee war, einen Dekorator auf jeder Seitenklasse hinzuzufügen. In diesem Decorator fügen Sie einen Aufruf an meine sichere Bibliothek (geben Sie/leaveAction) hinzu, wenn das Ereignis (load/leave) aufgerufen wird.
Eigentlich kann ich Dekorator auf Klasse erstellen. Aber ich weiß nicht, wie man den Methodenaufruf übersteuert.
Derzeit definiert ich meine Klasse Dekorateur liek dass:
@security
@Component({
selector: 'my-app',
template: '<h1>Hello Angular!</h1>'
})
export class AppComponent implements OnInit {
private toto= "demo";
constructor() {
console.log("construct!");
}
ngOnInit() {
console.log('onInit');
this.method1();
}
method1() {
console.log('method 1 : '+ this.toto);
}
}
function security<TFunction extends Function>(target: TFunction): TFunction {
var method1 = target.prototype.method1;
Object.defineProperty(target.prototype, 'method1', {
value: function() {
console.log('enterAction here');
// How to call real method1() here ?
// Call of method1() will fail since it don't know AppCompnent.toto here
return '';
}
});
return target;
}
Grüße,
EDIT
Finaly, fand ich eine andere Art und Weise ohne Dekorateur mit meinem Problem zu lösen.
ich versucht, aber es sagen 'Fehler t ionViewWillEnter Fehler: Kann nicht Eigenschaft lesen‚anwenden‘von undefined' – manu
Das ist eine Laufzeit Fehler, es bedeutet, dass die Klasse, die an den Dekorator übergeben wurde, nicht "method1" hatte. Als ich es ausgeführt habe, hat es funktioniert, also glaube ich, dass du Code ausführst, der anders ist als was du gepostet hast? –
Endlich habe ich einen anderen Weg gefunden, die Methode zu abonnieren. Method1 ist abonnierbar. Und in meiner AppComponent (mit ionic) benutze ich 'this.nav._app.method1scripture (...' Aber danke für deine Hilfe. Ich werde mehr in der Tiefe Verzierungen später überprüfen. – manu