2017-04-16 11 views
5

Sau khi đọc này section about component interaction - Tôi đã nhận thấy rằng có một cách khác để giao tiếp từ trẻ để cha mẹ (mà đã không thực sự ghi nhận có):Góc - thông tin liên lạc từ cha mẹ sang con không có giấy tờ?

Nó chỉ ra rằng nếu Tôi có một tầng lớp phụ huynh:

@Component({ 
    selector: 'my-app', 
    template: ` 
    <div> 
     <h2>Hello {{name}}</h2> 
     <my-item></my-item> 
    </div> 
    `, 
}) 
export class App { 
    name:string; 
    go1() 
    { 
    alert(2) 
    } 
    constructor() {} 
} 

Và trong thành phần con - tôi Tiêm một loại parent vào ctor:

@Component({ 
    selector: 'my-item', 
    template: ` 
    <div> 
    <input type="button" value='invoke parent method' (click) = "myGo()"/> 
    </div> 
    `, 
}) 
    class MyItem { 
    name:string; 
    private parent1 : App; 

    myGo() 
    { 
    this.parent1.go1() //<--- access is available here 
    } 

    constructor(private parent1 : App) 
    { 
    this.parent1 = parent1; //<------------ manually, unlike service 
    this.name = `Angular! v${VERSION.full}` 
    } 
} 

Sau đó góc thấy rằng tôi cố gắng ing để tiêm một lớp kiểu cha và nó cho phép tôi truy cập vào nó.

Tất nhiên, nhấp chuột hoạt động.

Câu hỏi:

Bên cạnh lựa chọn thay thế khác mà tôi đã biết, là nó ghi ở đâu không? hoặc là nó chỉ là một tính năng mà tôi không thể dựa vào nó

plnkr

+0

Nếu nó không được ghi lại, tôi sẽ không dựa vào nó. Nó có thể được thay đổi trong bản phát hành nhỏ tiếp theo mà không có nó được liệt kê như là một sự thay đổi đột phá ... – fredrik

Trả lời

3

này hoạt động tốt và có thể được sử dụng.

Một nhược điểm chính là, nó phá vỡ đóng gói. Thành phần con cần biết về thành phần gốc. Cách tiếp cận này làm cho đứa trẻ được kết hợp chặt chẽ với cha mẹ, thường được coi là một điều xấu vì nó ngăn không cho thành phần được sử dụng lại ở bất kỳ đâu trong ứng dụng của bạn, vì nó bây giờ chỉ hoạt động như một đứa con của chính cha mẹ này.

+0

Đồng ý. Chỉ muốn biết nếu nó an toàn để sử dụng (vì nó không được ghi chép). cảm ơn bạn. –

+1

Bên cạnh đó nó an toàn. Nếu bạn có thành phần 'TabPanel' và' TabComponent' chỉ được sử dụng với 'TabPanel', thì IMHO không có gì chống lại bằng cách sử dụng phương pháp này. –

+0

@ GünterZöchbauer bất cứ điều gì không có giấy tờ có thể được thay đổi mà không cần thông báo, tôi sẽ không nghĩ rằng đó là một cái gì đó có thể được dựa vào. – fredrik

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