2016-07-30 30 views
6

Tôi bắt đầu với góc 2, tôi có một bộ phận trẻ em "ChildCmp" khởi tạo và sau khi tôi cần phá hủy thành phần thông qua một nhấp chuột, chúng ta hãy nói:góc 2 - phá hủy thành phần con

@Component({ 
selector: 'main-cmp', 
templateUrl: './main-cmp.html', 
directives: [ChildCmp] 
}) 
class MainCmp { 
    @ViewChild(ChildCmp) 
    childCmp: ChildCmp; 
    destroyChildClick(){ 
     this.childCmp.destroy(); 
    } 
} 

nhưng mã trước doesn 't chạy, phá hủy() là undefined và ngoại lệ là:

TypeError: this.childCmp.destroy is not a function

tôi đã đọc this thread và có đang sử dụng ViewContainerRef.createComponent(), thành phần tạo ra với điều này là một thể hiện của "ComponentRef", nhưng childCmp không có triển khai "ComponentRef".

Làm cách nào tôi có thể triển khai hoặc tiêm phương pháp tiêu diệt?

Cảm ơn tất cả!

+0

chương trình này ở đâu và làm thế nào để bạn tạo ra một thành phần? – micronyks

+4

Tại sao tiêu diệt khi bạn chỉ có thể '* ngIf'? – Harangue

+0

@Harangue Tôi đã tạo các thành phần động bằng cách sử dụng ViewContainerRef.createComponent(), các thành phần khác được tạo từ mẫu, do đó tôi yêu cầu một dạng duy nhất để tiêu diệt. – Alexander

Trả lời

4

Hãy thử

export class MainCmp { 

    @ViewChild(ChildCmp) childRef: ChildCmp; 

    destroyClick() { 

     if (this.childRef) { 
     this.childRef.destroy(); 
     } 
    } 
} 
+1

không có ý nghĩa. –

+0

Tôi không nghĩ rằng điều này trả lời câu hỏi của OP. Ngoài ra, những gì được viết ở đây không có ý nghĩa với tôi. Các thành phần con bị phá hủy khi cha mẹ bị phá hủy. Bất kể liệu 'this.childRef.destroy()' có hoạt động hay không, về cơ bản bạn đang kêu gọi đứa trẻ bị phá hủy ngay trước khi nó bị phá hủy. – freethebees

+0

@freethebees Không có cơ thể nào nói rằng bạn cần phải tiêu diệt đứa trẻ bằng tay, nhưng người ta có thể muốn phá hủy đứa trẻ cho rất nhiều trường hợp sử dụng khác nhau. Nếu bạn muốn giữ cha mẹ và phá hủy đứa trẻ thì sao? –

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