Evet, yönlendirici çıkışları aracılığıyla görüntülenen bileşenlerin girişlerini ayarlayabilirsiniz . Ne yazık ki, diğer yanıtlarda da belirtildiği gibi bunu programlı olarak yapmanız gerekiyor. Gözlenebilirler söz konusu olduğunda buna büyük bir uyarı var (aşağıda açıklanmıştır).
Bunu nasıl yapacağınız aşağıda açıklanmıştır:
(1)activate
Ana şablondaki yönlendirici çıkışının etkinliğine bağlayın :
<router-outlet (activate)="onOutletLoaded($event)"></router-outlet>
(2) Üst öğenin tipkript dosyasına geçin ve her etkinleştirildiğinde alt bileşenin girişlerini programlı olarak ayarlayın:
onOutletLoaded(component) {
component.node = 'someValue';
}
Bitti.
Ancak, yukarıdaki sürüm onOutletLoaded
netlik açısından basitleştirilmiştir. Yalnızca, tüm alt bileşenlerin atadığınız aynı girdilere sahip olmasını garanti edebiliyorsanız çalışır. Farklı girişlere sahip bileşenleriniz varsa, tip korumaları kullanın:
onChildLoaded(component: MyComponent1 | MyComponent2) {
if (component instanceof MyComponent1) {
component.someInput = 123;
} else if (component instanceof MyComponent2) {
component.anotherInput = 456;
}
}
Neden bu yöntem servis yöntemine tercih edilebilir?
Ne bu yöntem ne de hizmet yöntemi alt bileşenler ile iletişim kurmanın "doğru yolu" değildir (her iki yöntem de saf şablon bağlamadan uzaklaşır), bu nedenle proje için hangi yolun daha uygun olduğuna karar vermeniz yeterlidir.
Bununla birlikte, bu yöntem, "iletişim için bir hizmet yaratma" yaklaşımı ile ilişkili sıkı bağlantıdan kaçınır (yani, ebeveynin hizmete ihtiyacı vardır ve çocukların hepsi hizmete ihtiyaç duyarak çocukları başka yerde kullanılamaz hale getirir). Ayrıştırma genellikle tercih edilir.
Çoğu durumda, bu yöntem aynı zamanda "açısal yola" daha yakın hissettirir, çünkü verileri çocuğunuzun bileşenlerine @Inputs aracılığıyla aktarmaya devam edebilirsiniz (bu, ayrıştırma kısmıdır - bu, başka yerlerde yeniden kullanımı sağlar). Ayrıca, hizmetinizle sıkı bir şekilde birleştirmek istemediğiniz veya bağlayamayacağınız halihazırda mevcut veya üçüncü taraf bileşenler için de uygundur.
Öte yandan, açısal yoldan daha az hissedebilir ...
Uyarı
Bu yöntemle ilgili uyarı, dizgi dosyasındaki verileri ilettiğiniz için, artık {{ myObservable$ | async }}
gözlemlenebilir verilerinizi otomatik olarak kullanmak ve alt bileşenlere aktarmak için şablonlarda (örn. ) Kullanılan eşzamansız boru modelini kullanma seçeneğinizin olmamasıdır .
Bunun yerine, onChildLoaded
işlev her çağrıldığında mevcut gözlemlenebilir değerleri almak için bir şeyler ayarlamanız gerekir . Bu muhtemelen ana bileşenin onDestroy
işlevinde bir miktar kopma gerektirecektir . Bu çok alışılmadık bir şey değil, genellikle şablona bile ulaşmayan bir gözlemlenebilir nesneyi kullanırken bunun yapılması gereken durumlar vardır.
node
nerede bir türü olarak varstring
ve bu işin görünmüyor ya da ben bir şey yanlış yapıyorum