2017-04-16 12 views
5

इस section about component interaction पढ़ने के बाद - मैंने देखा है बच्चे से माता-पिता से संवाद का एक और तरीका है (जो वास्तव में वहाँ दर्ज नहीं किया गया था) है कि वहाँ:कोणीय - एक अनियंत्रित बाल-से-पैरेंट संचार?

ऐसा लगता है कि मैं एक माता पिता के वर्ग है यदि:

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

और बच्चे घटक में मैं ctor में एक parent प्रकार सम्मिलित करें:

@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}` 
    } 
} 

फिर कोणीय देखता है कि मैं कर रहा हूँ कोशिश एक अभिभावक प्रकार वर्ग इंजेक्ट करने के लिए और यह मुझे इसके लिए उपयोग देता है।

क्लिक का काम करता है।

प्रश्न:

अन्य विकल्प जो मैं पहले से ही पता के अलावा, यह कहीं भी दर्ज है? या यह सिर्फ एक विशेषता यह है कि मैं भरोसा नहीं कर सकते पर यह

plnkr

+0

यदि यह दस्तावेज नहीं है, तो मैं इस पर भरोसा नहीं करता। अगली मामूली रिलीज में इसे तोड़ने के बदलाव के रूप में सूचीबद्ध किए बिना बदला जा सकता है ... – fredrik

उत्तर

3

यह अच्छी तरह से काम करता है और इस्तेमाल किया जा सकता है।

एक बड़ा नकारात्मक पक्ष यह है कि यह encapsulation तोड़ता है। बच्चे घटक को मूल घटक के बारे में जानना आवश्यक है। यह दृष्टिकोण बच्चे को अपने माता-पिता के साथ कसकर जोड़ता है, जिसे आम तौर पर एक बुरी चीज माना जाता है क्योंकि यह घटक को आपके एप्लिकेशन में कहीं भी फिर से उपयोग करने से रोकता है, क्योंकि यह अब केवल इस सटीक माता-पिता के बच्चे के रूप में काम करता है।

+0

सहमत हैं। सिर्फ यह जानना चाहता था कि इसका उपयोग सुरक्षित है (क्योंकि यह दस्तावेज नहीं है)। धन्यवाद। –

+1

इसके अलावा यह सुरक्षित है। यदि आपके पास 'TabPanel' घटक और 'TabComponent' है जिसका उपयोग केवल' TabPanel' के साथ किया जाना चाहिए, तो आईएमएचओ कुछ भी नहीं है जो इस दृष्टिकोण का उपयोग करने के खिलाफ बोलता है। –

+0

@ गुंटर ज़ोचबॉयर जो कुछ भी अनियंत्रित है उसे अधिसूचना के बिना बदला जा सकता है, मुझे नहीं लगता कि ऐसा कुछ है जिस पर भरोसा किया जा सकता है। – fredrik

संबंधित मुद्दे