2016-03-20 11 views
6

एंगुलर 2 घटक में अपरिभाषित है, मैं पैरामीटर के साथ एक ईवेंट उत्सर्जित करने के लिए EventEmitter का उपयोग करता हूं। मूल घटक श्रोता में यह पैरामीटर अपरिभाषित है। यहां एक plunker है:इवेंट एमिटर का पैरामीटर श्रोता

import {Component, EventEmitter, Output} from 'angular2/core' 
@Component({ 
    template: `<ul> 
    <li *ngFor="#product of products" (click)="onClick(product)">{{product.name}}</li> 
    </ul>`, 
    selector: 'product-picker', 
    outputs: ['pick'] 
}) 
export class ProductPicker { 
    products: Array<any>; 
    pick: EventEmitter<any>; 
    constructor() { 
    this.products = [ 
     {id: 1, name: 'first product'}, 
     {id: 2, name: 'second product'}, 
     {id: 3, name: 'third product'}, 
     ]; 
    this.pick = new EventEmitter(); 
    } 
    onClick(product) { 
    this.pick.emit(product); 
    } 
} 
@Component({ 
    selector: 'my-app', 
    providers: [], 
    template: ` 
    <div> 
     <h2>Pick a product</h2> 
     <product-picker (pick)="onPick(item)"></product-picker> 
    </div> 
    <div>You picked: {{name}}</div> 
    `, 
    directives: [ProductPicker] 
}) 
export class App { 
    name: string = 'nothing'; 
    onPick(item) { 
    if (typeof item == 'undefined') { 
     console.log("item is undefined!"); 
    } else { 
     this.name = item.name; 
    } 
    } 
} 

मूल घटक को उठाए गए उत्पाद को कैसे पास किया जाए?

उत्तर

14

आप इस तरह इवेंट $ चाहिए:

<product-picker (pick)="onPick($event)"></product-picker> 

यह मूल्य आपके द्वारा दी गई जब जुड़े EventEmitter की फेंकना विधि बता रही है से मेल खाती है।

आपके मामले में पैरामीटर के रूप में प्रदान किया गया आइटम वैरिएबल कुछ भी नहीं है।

+1

यह काम करता है, धन्यवाद। यह मेरे लिए स्पष्ट नहीं है कि यह सही क्यों है, फिर: '(क्लिक करें) = "ऑनक्लिक (उत्पाद)'। यहां पैरामीटर एक परिवर्तनीय नाम है, न कि $ ईवेंट, लेकिन मूल्य श्रोता के लिए दृश्यमान है ($ ईवेंट पास करना बेकार होगा यहां)। मेरा मतलब है, जब पैरामीटर के रूप में "$ event" शब्द का उपयोग करना आवश्यक है और जब किसी अन्य नाम का उपयोग किया जा सकता है? – camcam

+4

@camcam, जब हम किसी घटक पर एक कस्टम ईवेंट से जुड़ते हैं, तो '$ event' विशेष है कीवर्ड जो हमें 'emit() 'ted' मान प्राप्त करने के लिए उपयोग करना चाहिए। जब ​​हम एक क्लिक ईवेंट से जुड़ते हैं, जैसे' क्लिक', '$ event' डीओएम ईवेंट होता है। किसी भी प्रकार के बाध्यकारी के लिए, हमारे पास पहुंच भी है स्थानीय टेम्पलेट चर के लिए, इसलिए कारण हम 'product' का भी उपयोग कर सकते हैं। –

+0

आपको बहुत धन्यवाद @ थिएरी टेम्पलर, मुझे एक ही समस्या थी, लेकिन जब मैं मूल घटक टेम्पलेट में $ ईवेंट का उपयोग करता हूं तो यह हल हो जाता है <आयन-सामग्री पैडिंग >

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