ใช่คุณสามารถตั้งค่าปัจจัยการผลิตของส่วนประกอบแสดงผ่านทางร้านเราเตอร์ น่าเศร้าที่คุณต้องทำแบบเป็นโปรแกรมดังที่กล่าวไว้ในคำตอบอื่น ๆ มีข้อแม้ที่สำคัญเมื่อมีส่วนเกี่ยวข้องกับการสังเกตการณ์ (อธิบายไว้ด้านล่าง)
วิธีการมีดังนี้
(1)เชื่อมต่อกับactivate
เหตุการณ์ของเราเตอร์เต้าเสียบในแม่แบบหลัก:
<router-outlet (activate)="onOutletLoaded($event)"></router-outlet>
(2)สลับไปที่ไฟล์ typescript ของผู้ปกครองและตั้งค่าอินพุตขององค์ประกอบลูกโดยทางโปรแกรมทุกครั้งที่เปิดใช้งาน:
onOutletLoaded(component) {
component.node = 'someValue';
}
เสร็จแล้ว
อย่างไรก็ตามเวอร์ชันข้างต้นonOutletLoaded
ถูกทำให้ง่ายขึ้นเพื่อความชัดเจน จะใช้งานได้ก็ต่อเมื่อคุณสามารถรับประกันว่าส่วนประกอบย่อยทั้งหมดมีอินพุตเดียวกันกับที่คุณกำหนด หากคุณมีส่วนประกอบที่มีอินพุตต่างกันให้ใช้ตัวป้องกันประเภท:
onChildLoaded(component: MyComponent1 | MyComponent2) {
if (component instanceof MyComponent1) {
component.someInput = 123;
} else if (component instanceof MyComponent2) {
component.anotherInput = 456;
}
}
เหตุใดวิธีนี้จึงเป็นที่ต้องการมากกว่าวิธีการบริการ
ทั้งวิธีนี้หรือวิธีการบริการไม่ใช่ "วิธีที่ถูกต้อง" ในการสื่อสารกับส่วนประกอบย่อย (ทั้งสองวิธีห่างจากการผูกเทมเพลตแบบแท้) ดังนั้นคุณต้องตัดสินใจว่าวิธีใดเหมาะสมกับโครงการมากกว่ากัน
อย่างไรก็ตามวิธีนี้หลีกเลี่ยงการมีเพศสัมพันธ์ที่แน่นหนาซึ่งเกี่ยวข้องกับแนวทาง "สร้างบริการเพื่อการสื่อสาร" (กล่าวคือผู้ปกครองต้องการบริการและเด็ก ๆ ทุกคนต้องการบริการทำให้เด็กใช้ไม่ได้ที่อื่น) โดยปกติแล้วการแยกส่วนเป็นที่ต้องการ
ในหลาย ๆ กรณีวิธีนี้ให้ความรู้สึกใกล้เคียงกับ "วิธีเชิงมุม" มากขึ้นเนื่องจากคุณสามารถส่งต่อข้อมูลไปยังส่วนประกอบลูกของคุณผ่านทาง @Inputs (นั่นคือส่วนการแยกส่วนซึ่งจะทำให้สามารถใช้ซ้ำที่อื่นได้) นอกจากนี้ยังเหมาะสำหรับส่วนประกอบที่มีอยู่แล้วหรือของบุคคลที่สามที่คุณไม่ต้องการหรือไม่สามารถจับคู่กับบริการของคุณได้อย่างแน่นหนา
ในทางกลับกันมันอาจจะรู้สึกน้อยกว่าทางเชิงมุมเมื่อ ...
ข้อแม้
ข้อแม้ของวิธีนี้คือเนื่องจากคุณกำลังส่งข้อมูลในไฟล์ typescript คุณจึงไม่มีตัวเลือกในการใช้รูปแบบ pipe-async ที่ใช้ในเทมเพลต (เช่น{{ myObservable$ | async }}
) เพื่อใช้โดยอัตโนมัติและส่งต่อข้อมูลที่สังเกตได้ของคุณไปยังส่วนประกอบย่อย
คุณจะต้องตั้งค่าบางอย่างเพื่อให้ได้ค่าที่สังเกตได้ในปัจจุบันทุกครั้งที่onChildLoaded
มีการเรียกใช้ฟังก์ชัน สิ่งนี้อาจต้องใช้การฉีกขาดบางอย่างในonDestroy
ฟังก์ชันขององค์ประกอบหลัก นี่ไม่ใช่เรื่องผิดปกติเกินไปมีหลายกรณีที่จำเป็นต้องทำเช่นเมื่อใช้สิ่งที่สังเกตได้ซึ่งไม่สามารถเข้าถึงแม่แบบได้
node
ที่เป็นประเภทstring
และดูเหมือนจะไม่ได้ผลหรือฉันทำอะไรผิดพลาด