Ich verwende angular2
mit Typescript
. Ich versuche, eine base class
zu erstellen, die von anderen Klassen vererbt werden kann, und innerhalb der Basisklasse wird ein Dienst injiziert. Bisher kann ich die ajaxService
injected
nicht richtig in die base class
, die inherited
in die user class
ist. Insbesondere wenn ein Benutzer instanziiert wird und dann die save()
-Methode von der user
Instanz aufgerufen wird, funktioniert die folgende Zeile in base class
: return _this._ajaxService.send(options);
nicht, da _ajaxService
nicht definiert ist. HierAngular2-Abhängigkeitsinjektion, Service wird während Klassenvererbung nicht injiziert
ist ein user class
, das die base class
erweitert:
import {Base} from '../utils/base';
export class User extends Base {
// properties
id = null;
email = null;
password = null;
first_name = null;
last_name = null;
constructor(source) {
_super.CopyProperties(source, this);
}
}
Hier ist die base class
:
import {Component} from 'angular2/core';
import {AjaxService} from './ajax.service';
@Component({
providers: [AjaxService]
})
export class Base {
constructor(private _ajaxService: AjaxService) { }
// methods
public static CopyProperties(source:any, target:any):void {
for(var prop in source){
if(target[prop] !== undefined){
target[prop] = source[prop];
}
else {
console.error("Cannot set undefined property: " + prop);
}
}
}
save(options) {
const _this = this;
return Promise.resolve()
.then(() => {
const className = _this.constructor.name
.toLowerCase() + 's';
const options = {
data: JSON.stringify(_this),
url: className,
action: _this.id ? 'PATCH' : 'POST';
};
debugger;
return _this._ajaxService.send(options);
});
}
}
Dies funktioniert gut, außer dass AjaxService
nicht injiziert wird in der Basisklasse. Ich denke, das macht Sinn, da der Benutzer nicht als Basis instanziiert wird.
Also wie kann ich AjaxService
in der Base module
verwenden, wenn "Base-Modul in einer anderen Klasse erweitert wird?
Ich denke, wenn ich Benutzer instanziiere, wird der Konstruktor in der Benutzerklasse aufgerufen, aber der Konstruktor in der Basisklasse, die den Dienst einspeist, wird nicht aufgerufen.
Hier ist die AjaxService
:
import {Injectable} from 'angular2/core';
@Injectable()
export class AjaxService {
// methods
send(options) {
const endpoint = options.url || "";
const action = options.action || "GET";
const data = options.data || {};
return new Promise((resolve,reject) => {
debugger;
$.ajax({
url: 'http://localhost:3000' + endpoint,
headers: {
Authentication: "",
Accept: "application/vnd.app.v1",
"Content-Type": "application/json"
},
data: data,
method: action
})
.done((response) => {
debugger;
return resolve(response);
})
.fail((err) => {
debugger;
return reject(err);
});
});
}
}
Soweit ich weiß injectables (AjaxService) müssen mit '@Injectable() 'in TS kommentiert werden. –
Wo verwenden Sie die 'User' Klasse? Ist es eine Komponente? Hat es eine Vorlage? – yarons