2017-09-18 1 views
0
export class FloorPlanComponent implements AfterViewInit, OnInit { 
     constructor(); 
     constructor(public _baseComponentService?: BaseComponentService, 
        public _internalZoneService?: InternalZoneService, 
        public routeParams?: ActivatedRoute, 
        public internalAssetService?: InternalAssetService, 
        public slimLoadingBarService?: SlimLoadingBarService, 
        private errorLoggerService?: ErrorLoggerService 
       ) { 
        if (this._baseComponentService != null) { 
          this._baseComponentService.SetPageTitle("Zones - Internal"); 
        } 
     this.imgDelZone = parentElement.append("image") 
     .attr("id", "delZone" + newId) 
     .attr("idCounter", newId) 
     .attr("r", "NaN") 
     .attr("stroke-width", 0) 
     .attr("opacity", 0.8) 
     .attr("x", function (d) { return d.x + (shapeWidth - 22); }) 
     .attr("y", function (d) { return d.y + 1; }) 
     .attr("style", "opacity: 1; stroke-width: 1;") 
     .attr("xlink:href", "../app/assets/images/Remove_Delete-22.png") 
     .attr("preserveAspectRatio", "none") 
     .attr("transform", " ") 
     .attr("height", 18) 
     .attr("width", 18) 
     .attr("cursor", "pointer").on("click", function() { 
      var comp = new FloorPlanComponent(); 
      comp.promptDeleteZone(this); 
     }); 
} 

A l'intérieur de la fonction "click", je veux utiliser ceci pour faire référence à ma classe. Mais il se réfère à cela comme un objet fenêtre. Pour résoudre ce problème, j'ai créé un objet de classe à l'aide du constructeur sans paramètre. Mais d'après cela, je ne peux pas obtenir de service. S'il vous plaît aider.Dans TypeScript, créer un objet de la même classe ayant le constructeur de http

Répondre

0

Vous pouvez utiliser la fonction de flèche:

attr("cursor", "pointer").on("click",() => { 
    ... 
    }); 

fonctions fléchées saisir la this où la fonction est créée afin this soulignerons FloorPlanComponent exemple.

+0

Merci Alexander pour la réponse rapide. J'ai encore un scénario où je suis coincé. Voir le code ci-dessous. faites glisser: any = d3.drag(). on ("drag", this.dragmove); dans la fonction dragmove (d), je veux cela comme un floorplancomponent ainsi que d'obtenir cet objet de drag sélectionné. Comment est-ce possible. –

+0

Vous pouvez simplement enregistrer le pointeur sur 'this' dans une variable locale et utiliser la fermeture pour y accéder: ' let self = this; faites glisser: any = d3.drag(). On ("drag", function() { laissez dragItem = this; self.dragmove (dragItem); }); ' –

+0

ne fonctionne pas. J'ai utilisé le moi: any = this; (au niveau de la racine de la classe). Dans la fonction, self fait toujours référence à l'objet window. –

0

Que diriez-vous

.attr("cursor", "pointer").on("click", this.onClicked.bind(this)); 

............. 
onClicked() { 
    var comp = new FloorPlanComponent(); 
    comp.promptDeleteZone(this); 
} 
+0

J'ai utilisé la même chose mais avec cette approche, je suis incapable d'utiliser mes services. c'est montrer comme indéfini. –

+0

Vous pouvez injecter votre service depuis le constructeur, n'est-ce pas? –