2016-11-07 7 views
7

मैं async मान के साथ HostBinding को संभालने का सबसे अच्छा तरीका ढूंढ रहा हूं।निर्देश में Async होस्ट बाइंडिंग

पहले कोणीय v2.1.2 मैं @Directive डेकोरेटर की तरह में host संपत्ति इस्तेमाल कर सकते हैं:

@Directive({ 
    selector: 'img[my-directive]', 
    host : { 
     '[alt]' : "alt | async" 
    } 
}) 
export class MyDirective { 
    alt: Observable<string>; 
} 

लेकिन यह, 2.1.2 फिक्स यह की तरह इस इच्छित व्यवहार नहीं था दिखता संस्करण के बाद से। don't access view local variables nor pipes in host expressions देखें।

अब, एओटी संकलन के साथ संकलन करते समय, मुझे Parser Error: Host binding expression cannot contain pipes in Directive मिलता है।

+0

क्या मेजबान संपत्ति आप के लिए बाध्य करने के लिए कोशिश कर रहे हैं? क्या आप हमें मेजबान तत्व का कोड दे सकते हैं? –

+0

मेजबान तत्व मूल ' 'है। मैं 'altDirective' को' alt' अवलोकन योग्य संपत्ति के मान को 'alt' img विशेषता में जोड़ना चाहता हूं। –

+1

"... हम मेजबान बाइंडिंग में कभी भी पाइप नहीं चाहते थे।" स्रोत: [Async होस्ट बाइंडिंग नो लॉन्ग वर्क्स 12671] (https://github.com/angular/angular/issues/12671#issuecomment-258168242) तो आपको ऐसा करने का एक और तरीका ढूंढना चाहिए, या अपना प्रश्न अपडेट करना चाहिए। –

उत्तर

3

टोबियास बॉश (कोणीय टीम के सदस्य) को सौंपने होंगे लिखते हैं: एक घटक ("बच्चे") के

होस्ट बाइंडिंग घटक का उपयोग करता है में क्रियान्वित कर रहे हैं वह घटक ("पैरेंट")। और मूल घटक एक अलग NgModule से संबंधित हो सकता है। तो यदि आप पाइप का उपयोग करते हैं, तो पाइप मूल घटक के NgModule के विरुद्ध हल किया गया है। हालांकि, यदि है कि NgModule आपके द्वारा उपयोग की जा रही पाइप की घोषणा नहीं करता है, तो आपके घटक टूट गया है।

यही कारण है कि हम मेजबान बाइंडिंग में कभी भी पाइप नहीं चाहते थे। 2.0 फ़ाइनल से पहले बड़े कंपाइलर रिफैक्टरिंग में से एक के बाद, हम गलती से इसे पुन: प्रस्तुत करते हैं, लेकिन यह एक बग था, एक विशेषता नहीं, अर्थशास्त्र गलत हैं।

स्रोत:

Async Host Binding No Longer Works #12671

1

मुझे यकीन है कि ऐसा करने का कोई विशेष तरीका नहीं है। आप स्पष्ट रूप से संपत्ति

@Directive({ 
    selector: 'img[my-directive]', 
    host : { 
     '[alt]' : "alt" 
    } 
}) 
export class MyDirective { 
    alt: Observable<string>; 

    ngOnInit() { 
     this.altObservable.subscribe(val => this.alt = val) 
    } 
} 
+0

इस तरह से मैं इसे अभी कर रहा हूं। हालांकि, मैं उम्मीद कर रहा था कि हम अभी भी 'AsyncPipe' का उपयोग कर सकते हैं क्योंकि यह केवल 'सब्सक्राइब' की तुलना में अधिक है। लेकिन धन्यवाद :) –

+0

टेम्पलेट के बाहर पाइप कभी काम नहीं करना था। (शायद कुछ पूर्व-बीटा समय में)। मैंने पाया कि यह हाल ही में काम करता है कि यह interresting। –

+0

मैंने v2.1.0 से पहले कभी कोशिश नहीं की थी, फिर v2.1.2 इसे –

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