2016-11-07 24 views
7

HostBinding'i async değeriyle işlemenin en iyi yolunu arıyorum.Async HostBinding yönergesi

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

Ama bu hedeflenen davranış değildi gibi versiyonundan beri, 2.1.2 düzeltmeleri görünüyor:

Eğik v2.1.2 önce böyle @Directive dekoratör içinde host özelliğini kullanabilirsiniz. Bakınız don't access view local variables nor pipes in host expressions.

Şimdi, AoT derlemesi ile derlerken, Parser Error: Host binding expression cannot contain pipes in Directive elde ediyorum.

+0

? Bize ev sahibi elemanın kodunu verebilir misiniz? –

+0

Ana makine öğesi, yerel bir ''. MyDirective'in 'alt' gözlenebilir özellik değerini 'alt' img özniteliğine eşzamansız olarak bağlamasını istiyorum. –

+1

"... hiçbir zaman ana makine bağlantılarında borular istemedik." Kaynak: [Async Host Binding Artık Çalışmıyor 12671] (https://github.com/angular/angular/issues/12671#issuecomment-258168242) Bunu yapmak için başka bir yol bulmalı veya sorunuzu güncellemelisiniz. –

cevap

3

Tobias Bosch (Açısal ekibinin üyesi) atamak gerekir yazıyor:

Sunucu bağlamaları bir bileşeni ("alt") arasında kullandığı bileşeni içinde yürütülür bu bileşen ("ebeveyn"). Ve ana bileşen farklı bir NgModule'ye ait olabilir. Bu nedenle, bir boru kullanıyorsanız, ana bileşenin NgModule'sine karşı boru çözülür. Ancak, , NgModule kullandığınız boruyu bildirmezse, bileşeniniz bozulur.

Bu nedenle, hiçbir zaman ana makine bağlantılarında borulara sahip olmak istemedik. 2.0 finalinden önce daha büyük derleyici refakatörlerinden biri sonra, yanlışlıkla tekrar kullanıma soktu, ancak bu bir hataydı, bir özellik değil, semantiği yanlış.

Kaynak:

sen bağlamak çalıştığımız şey konak özelliği

Async Host Binding No Longer Works #12671

1

Bunun için özel bir yol olmadığından eminim. Açıkça mülkiyet

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

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

Şimdi bunu yapıyorum. Ancak, “AsyncPipe” yi kullanmaya devam edebileceğimizi umuyordum çünkü sadece bir "abone" yi daha fazla tetikliyor. Ama teşekkürler :) –

+0

Şablonun dışındaki boruların asla çalışması gerekiyordu. (belki bazı ön beta zamanlarında). Yakın zamana kadar çalıştığı onu yakaladım. –

+0

Daha önce hiç denemedim v2.1.0, sonra v2.1.2 kaldırır –