comment étendre le service avec dépendances angulaire 2
J'ai un service parent qui a des dépendances comme
@Injectable()
export class ParentService{
constructor(private http:Http, private customService:CustomService){}
}
et je veux étendre le service
@Injectable()
export class ChildService extends ParentService{
constructor (){
super(??) <= typescript now asking to enter two parameters according to ParentServie's constructor
}
}
Modifier-----------------
@Injectable()
export class ParentService{
constructor(private http:Http, private customService:CustomService){}
get(){this.http.get(...)}
}
@Injectable()
export class ChildService extends ParentService{
constructor (private http:Http, private customService:CustomService){
super(http, customService)
}
}
Alors je peux utiliser dans les composants?
export class Cmp {
constructor(private childService:ChildService){
this.childService.get()
}
}
OriginalL'auteur Han Che | 2016-08-29
Vous devez vous connecter pour publier un commentaire.
Les paramètres de la super-classe doivent être répétées et transmis à la super appel:
Il y a quelques "bidouilles" pour contourner comme L'héritage et l'injection de dépendance
non, le constructeur manque les paramètres. Angular2 DI lit les paramètres du constructeur quelles sont les dépendances, il doit passer à un composant.
ChildService
ne se passait rien, car il n'a pas les paramètres du constructeur.super(http, customService)
est pas valide, carhttp
etcustomService
ne sont pas connus dans la sous-classe.désolé j'ai oublié d'ajouter le paramenters à des composants enfants constructeur. pas correct?
Cela devrait fonctionner. C'est similaire à ce que j'ai montré dans ma réponse, mais maintenant il y a aussi remplacé les champs
http
etcustomService
dans leChildService
.Hey, comment aboust sauter
private
mot-clé dansChildService
constructeur?super()
est de les stocker en tant que propriétésOriginalL'auteur Günter Zöchbauer
Simplement faire de service de base... non
@Injectable()
! Par exemple, vous devez fournir une méthode pour récupérer profil utilisateur dansLoginService
. Cette méthode sera différente pour différents cas deLoginService
, et parent de la classe ne doit pas savoir quelque chose au sujet d'où cette méthode est venu: il peut être lambda, il peut être exporté fonction, il peut être une méthode d'un autre service. Pour ce faire, vous pouvez déclarer service des parents quiService des parents:
Puis l'étendre dans la classe enfant:
Remarque: dans
providers
section de module de spécifierLoginService
au lieu de parentBaseLoginService
:et de l'utiliser dans les classes de composants:
Si vous devez utiliser le service parent (par exemple dans les composants partagés qui seuls ont besoin de fonctionnalités de service des parents de la classe), puis fournir
BaseLoginService
de cette façon:OriginalL'auteur izogfif