15

Chúng tôi đang sử dụngsửa đổi một phần quy định tại TestBed.overrideComponent

TestBed.overrideComponent(CoolComponent, { 
    set: { 
     template: '<div id="fake-component">i am the fake component</div>', 
     selector: 'our-cool-component', 
     inputs: [ 'model' ] 
    } 
    }) 

để ghi đè lên một phần.

Các thành phần có một ViewChild mà chúng tôi cấu hình trong phương pháp của chúng tôi ngOnInit

@Component({ 
    selector: 'our-cool-component', 
    templateUrl: 'cool.component.html' 
}) 
export class CoolComponent implements OnInit, OnDestroy { 
    @Input() model: SomeModel 
    @ViewChild(CoolChildComponent) coolChildComponent; 

    ngOnInit() { 
    this.coolChildComponent.doStuff(); 
    } 
} 

Các CoolComponent lần lượt sống trong một thành phần Wrapper.

Khi chúng tôi gọi fixture.detectChanges() trên lịch thi đấu Wrapper, điều này sẽ cố gắng xây dựng CoolComponent, nhưng nó ngay lập tức chết khi nó gọi doStuff() vì CoolChildComponent không xác định.

Có cách nào để lấy số CoolComponent để khai báo CoolChildComponent không? Dường như chúng tôi không thể lấy nó ra khỏi Wrapper vì nó chỉ được tham chiếu thông qua mẫu, chứ không phải là thuộc tính của thành phần.

+1

Tôi vừa thêm tiền thưởng, dường như bạn không được thông báo (http://meta.stackoverflow.com/q/333838/3001761) – jonrsharpe

+0

Tính năng này có đang hoạt động không? Nó có hoạt động khi bạn đang chạy nó trong trình duyệt (hoặc bất kỳ thứ gì bạn đang nhắm mục tiêu) không? Đây có phải là sự cố chỉ thử nghiệm không? – j2L4e

Trả lời

7
ngOnInit() { 
    this.coolChildComponent.doStuff(); 
} 

nên

ngAfterViewInit() { 
    this.coolChildComponent.doStuff(); 
} 

because

Xem con được thiết lập trước khi gọi lại ngAfterViewInit được gọi.

+0

có hoạt động không? –

+0

Không, điều này không tạo nên sự khác biệt cho tôi. – conor

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