2016-04-06 36 views
1

ng2'de bileşen ve servis iletişimi ile uğraşırken 'en iyi uygulama' türü öneri arıyorum.Köşeli Bileşenler ve Enjekte Edilebilir Malzemeler Arası İletişim

örneğin, aşağıdakileri sorunum diyelim:

//auth.service.ts 
import {Injectable} from 'angular2/core'; 

@Injectable() 
export class AuthService { 

    login() { 
     //do some login stuff here 
    } 

} 

//login.component.ts 
import {Component} from 'angular2/core'; 
import {AuthService} from './path/to/auth.service'; 

@Component({ 

    selector: 'app-login', 
    template: '<button (click)="">Login</button>', 
    providers: [AuthService] 

}) 

export class LoginComponent { 

    constructor (
    public _authService: AuthService 
    ) {} 

} 

Sorum esas olarak bu etrafında toplanmaktadır: Bir oluşturmanız gerekir

<button (click)="">Login</button> 

Sadece (click)="_authService.login()" böyle bir şey yapmak mı yoksa LoginComponent içinde giriş yöntemi ve görünümünde referans?

<button (click)="login()">Login</button> 

export class LoginComponent { 

    constructor (
    public _authService: AuthService 
    ) {} 

    login() { 
    this._authService.login(); 
    } 

} 

görünümü sonra tamamen hizmetten ayrılmış gibi hissediyor beri Ancak, insanların ilk yaklaşım tercih yorum gördüm, ikincisi düşünüyorum. Ayrıca, _authService'un ayrıca görüntüye bağlı olması gereken bazı verilere de sahip olabileceği durumlar vardır; bu durumda, görünümün bu verinin değiştirebilmesinin tek yolu doğrudan _authService'a bağlanmasıdır.

Bu ikisi arasında iletişim oluşturulurken hangi yaklaşım en iyi uygulama olarak kabul edilir?

cevap

2

En iyi yöntem, hizmetin özel olmasını sağlamak ve hizmeti aramak için bileşeninizde bir yöntem kullanmaktır. Genellikle değişken adındaki alt çizgi, bunun özel olması gerektiği anlamına gelir.

constructor (
    private _authService: AuthService 
    ) {} 

Bu, kodunuzu daha modüler tutar. Bir fark hizmeti kullanmaya karar verirseniz veya aynı şeyi yapmak için kendi mantığınızı yazdıysanız, şablondaki HTML'yi güncellemeniz gerekmez. Sadece yöntemini güncellersin.

+0

Bu mükemmel bir fikir, teşekkürler! – spez86

İlgili konular