7

Fonksiyonları 2 veya daha fazla bileşen seviyesinden geçirmenin en iyi yolunun ne olduğunu merak ediyordum? '&' bağlantılarını kullanırken işlev sarmanın basit bir yolu yok mu?AngularJS 1.5 içindeki iç bileşenler arasındaki işlevleri iletmenin en iyi yolu nedir?

angular.module('app', []).component('app', { 
    controller: class AppController { 
    doSomething (data) {} 
    }, 
    template: ` 
    <sub-component on-do-something="$ctrl.doSomething(data)"> 
    </sub-component> 
    ` 
}) 

ps: Burada

bir kullanım amaçlarından ben ngRedux kullanıyorum, bu yüzden bu tür senaryo çok yaygındır

DÜZENLEME:

sorundur: işe yukarıdaki kodu için Her iç bileşen denetleyicisi şöyle görünecektir:

.component('subComponent', { 
    bindings: { 
     doSomething: '&' 
    }, 
    controller: function SubComponentController() { 
     this._doSomething = param => this.doSomething({data: param}); 
    }, 
    template: ` 
     <inner-component do-something="$ctrl._doSomething(data)"> 
     </inner-component> 
    ` 
}); 

.component('innerComponent', { 
    bindings: { 
     doSomething: '&' 
    }, 
    controller: function InnerComponentController() { 
     this._doSomething = param => this.doSomething({data: param}); 
    }, 
    template: ` 
     <sub-inner-component do-something="$ctrl._doSomething(data)"> 
     </sub-inner-component> 
    ` 
}); 

Ve sonra d geçmek zorundayım doğrudan doSomething yerine kendi _doSomething.

ps: Ben sizin alt bileşenlerin denetleyici bir sarmalayıcı işlevi sağlamak için gerekli değildir burada

+0

hizmetleri kullanma: Burada

angular.module('app', []) .component('app', { controller: class AppController { doSomething (data) { console.log(data); } }, template: ' <sub-component do-something="$ctrl.doSomething(data)"> </sub-component> ' }) .component('subComponent', { bindings: { doSomething: '&' }, template: ' <inner-component do-something="$ctrl.doSomething({data: data})"> </inner-component> ' }) .component('innerComponent', { bindings: { doSomething: '&' }, template: ' <sub-inner-component do-something="$ctrl.doSomething({data: data})"> </sub-inner-component> ' }) .component('subInnerComponent', { bindings: { doSomething: '&' }, template: ' <button ng-click="$ctrl.doSomething({data: 123})">Do Something</button> ' }); 

bir çalışma Plunker nedir? ;-) –

+0

@DmitriZaitsev redux ve akıllı ve aptal bileşenleri kavramları kullanıyorum verilen ideal bir çözüm değil :( – Hodes

+0

Fonksiyon sargısı ile ne demek istediğini açıklayabilir misiniz? –

cevap

18

ekleme kullanmıyorum. bindings'u kullanarak, doğrudan şablonunuzdan çağırabileceğiniz denetleyiciye otomatik olarak bir işlev eklenir.

Tek kırışıklık, bu işlevin, dış şablondaki ifadeye sunulacak yerlileri içeren bir nesne almasıdır. Bu örnekte, yöntemini çağırırken dış şablondaki data değişkeninin açıkça sağlanmış olması gerekir. Bu örnekte, data değişkeninin yöntemini çağırması gerekir. http://plnkr.co/edit/QQF9jDGf6yiewCRs1EDu?p=preview

+0

Wow. Angular'ın, baştaki ifadede "data: 123" ifadesini ana ifadedeki yerel değişkenlere nasıl çevirdiğini düşünürken biraz kafa karıştırıcı olur, ancak işe yarıyor. Anlayabildiğim kadar Angular kaynağında biraz daha fazla kazacağım sanırım. Teşekkürler @PeteBD – Hodes

İlgili konular