2016-06-22 9 views
7

Faccio fatica a capire quali metodi dovrebbero essere privati ​​e quali dovrebbero essere pubblici nella classe del componente.Pubblico o privato - Confusione di metodi di classe componente 2 angolare confusione

sembra essere abbastanza facile in servizio per giudicare se il metodo è pubblico o ad es privato:

export class MyServiceClass { 
    private _cache = {}; // this value is private and shouln't be accessed from outside 
    public accessCache(){ // it's public as it's an API method 
    return this._cache; 
    } 
    public setCache(newVal){ 
    this._cache = newVal; 
    } 
} 

Seguendo questa logica tutti i metodi di componente deve essere privata perché nessuno dei metodi deve essere esposto al di fuori della classe. (secondo to that post componente e la sua vista sono un'entità)

export class MyComponent {  
    private _getRandomNumbers(){ // this is used in view only 
    /*..*/ 
    } 
} 

Non c'è tragedia, ma poi nel this video si può imparare che solo i metodi pubblici di componenti devono essere testati unità. Seguendo sopra non riesco a trovare alcun motivo per avere metodi pubblici nella classe dei componenti, ma ho ancora alcuni metodi che vale la pena provare (specialmente i metodi usati in vista). Significa che sono completamente perso nel significato di metodi privati ​​e pubblici nel mondo angolare.

Quindi la mia domanda è semplice:

quali metodi di componenti devono essere contrassegnati come pubblici e privati.

+1

Perché la dichiarazione del video causa confusione? È normale testare solo l'API pubblica di un componente. –

+0

Di solito si hanno input e output e dipendenze iniettati che ottengono metodi chiamati dal componente o forniscono osservabili per l'iscrizione. È anche possibile accedere al DOM risultante e testare se contiene il contenuto previsto. –

+0

@ GünterZöchbauer È perché seguendo questa logica quando tutti i metodi nel componente sono privati ​​(utilizzati solo internamente o in modelli di componenti) non c'è nulla da testare. –

risposta

3

In Component Class, direi, imposta tutto come pubblico (se non è modificatore di accesso, è pubblico per impostazione predefinita).

In condizioni normali, non si estende una classe componente, pertanto, non è necessario modificare l'accesso, IMHO.

Ci sono casi in cui erediteremo un componente. Vedi qui component inheritance in Angular 2. Tuttavia, anche in questi casi, il modificatore di accesso potrebbe non essere necessario.

... 

export class MyComponent { 
    // injected service as private 
    constructor(private _randomSvc: RandomService) {} 

    getRandomNumbers(){ } // leave it as public 

    @Input() 
    myInput: string; // leave it as public 

    @Output() 
    myOutput; // leave it as public 
} 

Ricorda che JavaScript stesso non ha Modificatore di accesso. Il modificatore di accesso è applicabile solo durante lo sviluppo (IDE). Sebbene il modificatore sia utile in alcuni casi, suggerirei di ridurne l'utilizzo.