0

OK, also wollte ich einen Provider haben, die mir erlauben würde, die Referenz für den staatlichen Anbieter zu schließen. Also, ich habe den JS-Code und ich versuche, es auf TS zu migrieren. Das ist, was ich bis jetzt habe, aber aus irgendeinem Grund beschwert es sich immer wieder, dass es keine solche Methode gibt (Eigenschaft 'get' existiert nicht beim Typ 'IReferenceProvider'. Versucht, die Schnittstelle zu 'IReferenceProviderGetterInterface' zu ändern Methode scheint gut zu sein, aber ich verliere die 'injectRef' Methode, die einfach nicht richtig scheint, also glaube ich, dass ich die Schnittstellen an der richtigen Stelle habe). Jeder hatte dieses Problem vorher, es wäre schön, darauf hinzuweisen, was ich falsch mache. Ich habe versucht, das Problem zu googeln, aber alles scheint in Ordnung, so viel ich sagen kann. Wie auch immer, hier sind die Schnipsel:

export interface IReferenceProvider extends angular.IServiceProvider { 
    injectRef(name: string, ref: angular.ui.IUrlRouterProvider | angular.ui.IStateProvider): void; 
} 

export interface IReferenceProviderGetterInterface { 
    get(name: string): angular.ui.IUrlRouterProvider | angular.ui.IStateProvider; 
} 

class ReferenceProvider implements IReferenceProvider { 
    private refs: { [key: string]: angular.ui.IUrlRouterProvider | angular.ui.IStateProvider } = {}; 

    $get(): IReferenceProviderGetterInterface { 
     return { 
      get: (name: string): angular.ui.IUrlRouterProvider | angular.ui.IStateProvider => { 
       return this.refs[name]; 
      } 
     }; 
    } 

    injectRef(name: string, ref: angular.ui.IUrlRouterProvider | angular.ui.IStateProvider): void { 
     this.refs[name] = ref; 
    } 
} 

angular.module("app") 
    .provider("refs", ReferenceProvider); 
} 

und die Art, wie ich dies mit bin ist:

static $inject: Array<string> = ["refs"]; 

private $stateProvider: angular.ui.IStateProvider; 

constructor(refs: IReferenceProvider) { 
     this.$stateProvider = refs.get("$stateProvider"); 
... 
} 

Antwort

0

Die Funktion get wirklich existieren tut auf IReferenceProvider, es nur die Funktion $get hat.

Um das zu tun, was man Sie auch die get-Funktion auf dem ReferenceProvider selbst setzen müßten wollen:

export interface IReferenceProvider extends angular.IServiceProvider, IReferenceProviderGetterInterface { 
    injectRef(name: string, ref: angular.ui.IUrlRouterProvider | angular.ui.IStateProvider): void; 
} 

class ReferenceProvider implements IReferenceProvider { 
    private refs: { [key: string]: angular.ui.IUrlRouterProvider | angular.ui.IStateProvider } = {}; 

    $get(): IReferenceProviderGetterInterface { 
     return { 
      get: (name: string): angular.ui.IUrlRouterProvider | angular.ui.IStateProvider => { 
       return this.refs[name]; 
      } 
     }; 
    } 

    get: (name: string): angular.ui.IUrlRouterProvider | angular.ui.IStateProvider => { 
     return this.refs[name]; 
    } 

    injectRef(name: string, ref: angular.ui.IUrlRouterProvider | angular.ui.IStateProvider): void { 
     this.refs[name] = ref; 
    } 
} 

dies auf dem Service und auch auf dem Provider zur Verfügung der Funktion verursachen.

+0

Ich dachte, ich würde das auch ausprobieren, war aber unsicher, da es etwas anderen Code ausgibt, als ursprünglich in JS geschrieben wurde. Ich habe ein paar andere Guides im Internet ausgecheckt und sie wurden so gemacht, wie ich es hatte, aber ich denke, so sollte es jetzt sein? – Meshko

+0

yup, so soll es funktionieren, du könntest stattdessen auch einfach den Provider benutzen: 'refs. $ Get(). Get (" $ stateProvider ");' aber das scheint mir falsch zu sein ... – Nayish

+0

okay ..dank Du knospst! – Meshko

Verwandte Themen