2017-02-13 33 views
7

Tôi có thể làm điều này:góc 2: tiêm tài sản thay vì tiêm constructor

export class BaseComponent { 
protected config: IConfig; 

@Inject(AppConfig) protected appConfig: AppConfig; 

constructor() 
{ 
    this.config = this.appConfig.getConfig();  
} 

thay vì điều này:

export class BaseComponent { 
config: IConfig; 

constructor(
    private appConfig: AppConfig, 
    ) 
{ 
    this.config = appConfig.getConfig();  
} 

Mục đích là để đơn giản hóa chữ ký constructor, vì vậy tất cả thành phần trẻ không cần phải chỉ định appConfig trong hàm tạo của chúng. Vì vậy, các thành phần được thừa kế từ BaseComponent trông như thế này:

@Component({ 
    selector: 'sport-templates', 
    templateUrl: 'templates.component.html', 
    styleUrls: [ 'templates.component.scss' ], 
    encapsulation: ViewEncapsulation.None 
}) 
export class SportTemplates extends BaseComponent implements OnInit { 

    constructor() { 
     super(); 
    } 

thay vì như thế này:

@Component({ 
    selector: 'sport-templates', 
    templateUrl: 'templates.component.html', 
    styleUrls: [ 'templates.component.scss' ], 
    encapsulation: ViewEncapsulation.None 
}) 
export class SportTemplates extends BaseComponent implements OnInit { 

    constructor(appConfig: AppConfig) { 
     super(appConfig); 
    } 
+0

Bạn đã phát hiện ra các giải pháp tốt nhất để tiêm constructor? – PaladiN

+0

Tôi tìm thấy câu trả lời cho câu hỏi của mình tại đây: https://stackoverflow.com/questions/42461852/angular-2-inject-service-manually Cảm ơn. –

Trả lời

0

Không bạn không thể làm điều đó. Dịch vụ tiêm sẽ được tiêm khi hàm tạo được gọi.

Mục đích là để đơn giản hóa chữ ký hàm tạo.

Không cần đơn giản hóa chữ ký hàm tạo. Để dễ đọc, bạn có thể viết chúng trong nhiều dòng.

vì vậy tất cả thành phần con không cần phải xác định appConfig trong họ constructor

Trong trường hợp của bạn chỉ có lớp kế thừa lớp học của bạn sẽ truy cập vào đó. Nhưng nếu bạn có nghĩa là con thành phần những người được sử dụng trong thành phần của bạn, họ không thể truy cập các biến trong thành phần cha mẹ. Bạn cần phải vượt qua chúng.

CẬP NHẬT

this.config của bạn luôn luôn có thể nhìn thấy trong thành phần di truyền. Không cần phải tiêm lại một lần nữa appConfig trong thành phần SportTemplates.

+0

Cảm ơn bạn đã trả lời. Tôi đã thêm một chút làm rõ trong câu hỏi của mình. –

+0

@NikolaYankov cập nhật câu trả lời –

0

Bạn có thể làm điều này:

myService: MyService = this.injector.get(MyService); 
constructor(private injector:Injector) {} 

Các Injector là trong @ góc/lõi

+0

Trong khi nó hoạt động, nó không giống như cách thực sự. Giống như mô hình Dịch vụ định vị. Mặc dù tôi phải thừa nhận rằng sự khác biệt là tinh tế. – XOR

Các vấn đề liên quan