2016-10-28 17 views
5

मेरे पास दो घटक घटक ए और घटक बी हैं। उनमें से दोनों sibblings हैं, और घटक के बच्चे हैं माँ।कोणीय 2 में एक घटक से दूसरे घटक में फ़ंक्शन कैसे ट्रिगर करें?

मैं इसे ऐसा करना चाहता हूं कि जब मैं घटक ए पर एक बटन पर क्लिक करता हूं, तो यह घटक बी पर एक फ़ंक्शन कॉल ट्रिगर करता है।

क्या एक अवलोकन करने योग्य और घटक होने के साथ सेवा का उपयोग करने का तरीका ए घटक को उत्सर्जित करता है जो घटक बी सदस्यता लेता है या क्या कोई बेहतर/सर्वोत्तम अभ्यास तरीका है?

+0

यही कारण है, या एक में एक निर्गम से एक घटना फेंकना , जिसके लिए मूल घटक सदस्यता लेता है और इनपुट सेट करता है या मेथ को कॉल करता है बी –

+1

पर od http://stackoverflow.com/questions/39132385/communicate-between-sibling-components-anguar-2/39132530#39132530 देखें। इसे आपके प्रश्न का उत्तर देना चाहिए – kit

+0

मैं स्थानीय छोटी सेवा करता हूं, यह सबसे साफ तरीका है। – tibbus

उत्तर

6

मैं शायद एक सेवा एक Subject का उपयोग करता है का प्रयोग करेंगे। इस तरह से यह दोनों को प्रकाशित करने और अपने घटकों से

import { Subject } from 'rxjs/Subject'; 

class SomeService { 
    private _subject = new Subject<any>(); 

    newEvent(event) { 
    this._subject.next(event); 
    } 

    get events$() { 
    return this._subject.asObservable(); 
    } 
} 

से सदस्यता लिया जा सकता है, एक प्रकाशित कर सकते हैं और एक सदस्यता ले सकते हैं

@NgModul({ 
    providers: [ SomeService ] 
}) 
class AppModule {} 

@Component() 
class ComponentOne { 
    constructor(private service: SomeService) {} 

    onClick() { 
    service.newEvent('clicked!'); 
    } 
} 

@Component() 
class ComponentTwo { 
    constructor(private service: SomeService) {} 

    ngOnInit() { 
    this.service.events$.forEach(event => console.log(event)); 
    } 
} 

यह भी देखें:

2

आरएक्सजेएस विषय (~ EventEmitter) का उपयोग करें:import { Subject } from 'rxjs/Subject';

विषय सेवा आपको एक मूल घटक और उसके बच्चों के लिए द्वि-दिशात्मक संचार सक्षम करने की अनुमति देगी।

संदर्भ: https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service

RxJs विषय की अधिक जानकारी के लिए

जांच इस एक: https://www.youtube.com/watch?v=rdK92pf3abs

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