ว่าง ๆ นั่งดู Life Cycle ของ Component ใน Angular 6
โดย component นั้นเป็นส่วนการทำงานหลัก ๆ ของ Angular เลยก็ว่าได้
เป็นสิ่งที่สำคัญมาก
ทั้งการออกแบบเช่น Stateless และ Stateful component
ทั้งการเข้าใจกระบวนการทำงาน
ตลอดจน Life cycle ของมัน
ใน blog นี้ไปดู Life cycle ของ component กัน
พบว่ามันเยอะมาก ๆ นะ
Life cycle ของ component ประกอบไปด้วย 8 methods (จะเยอะไปไหน)
ซึ่งจะมีการทำงานเป็นลำดับที่ชัดเจนมาก
โดยที่ constructor() นั้นจะถูกเรียกเมื่อ component ถูกสร้างขึ้นมาเสมอ
เป็นความสามารถที่มีมาจากภาษา TypeScript อยู่แล้ว
เราสามารถแบ่งกลุ่มของ method เป็น 2 กลุ่มคือ
กลุ่มที่ 1 สำหรับ component หลัก
- ngOnChanges
- ngOnInit
- ngDoCheck
- ngOnDestroy
กลุ่มที่ 2 สำหรับ child component
- ngAfterContentInit
- ngAfterContentChecked
- ngAfterViewInit
- ngAfterViewChecked
มาดูว่าแต่ละ method นั้นถูกเรียกตอนไหนกันบ้าง ?
ngOnChanges
จะถูกเรียก input หรือ output element ที่ binding ไว้มีการเปลี่ยนแปลงค่า
ngOnInit
จะถูกเรียกเมื่อ component ถูกสร้างขึ้นมา เรียกหลังจาก ngOnChanges()
โดยใน method นี้ทำหน้าที่ในการ initial ค่าข้อมูลของ component
ngDoCheck
จะถูกเรียกทุกครั้งเมื่อเราไป focus ที่ element นั้น ๆ
จากนั้นจะทำการตรวจสอบว่ามีการเปลี่ยนแปลงหรือไม่
ดังนั้นในส่วนนี้ใช้ไว้สำหรับดักจับการเปลี่ยนแปลงในรูปแบบที่ต้องการ
ngOnDestroy
จะถูกเรียกก่อนที่ component จะถูกทำลาย
ใช้สำหรับการ unsubscribe พวก observable และ event ต่าง ๆ ที่ subscribed ไว้
เพื่อไม่ห้เกิดปัญหา memory leak
ต่อไปเป็นกลุ่มของ method ที่ถูกเรียกหลังจาก ngDoCheck
ngAfterContentInit
จะถูกเรียกในการสร้าง view/content ครั้งแรก
ngAfterContentChecked
จะถูกเรียกเพื่อใช้ตรวจสอบการเปลี่ยนแปลงต่าง ๆ ของ child component
ngAfterViewInit
จะถูกเรียกเมื่อสิ่งต่าง ๆ ใน child component ทำการ initial เสร็จเรียบร้อย
ngAfterViewChecked
จะถูกเรียกเมื่อสิ่งต่าง ๆ ที่ binding ไว้ของ child component มีการเปลี่ยนแปลง
ดังนั้นจะใช้สำหรับการรอค่าจะเปลี่ยนแปลงจาก child component นั่นเอง
อธิบายไปก็ยังงง ๆ ไม่เห็นภาพ เขียน code ดีกว่า
ก่อนอื่นนั้นต้องทำการ import และ implements interface ของ Life cycle ซึ่งเยอะมาก ดังนี้
จากนั้นก็ลอง run และ debug การทำงานดู
ก็พบว่า เมื่อเริ่มต้นเข้าใช้งานครั้งแรก
method ของ Life cycle ทำงานครบทั้ง 8 เลย
แต่เมื่อทำการแก้ไขหรือ focus ไปยัง element หรือ child ต่าง ๆ ใน component
จะทำการเรียก ngDoCheck, ngAfterContentChecked และ ngAfterViewChecked เสมอ
มาตรงนี้ถ้าอยากรู้อะไร อยากจัดการเรื่องอะไรตรงไหน
ก็จะง่ายขึ้นอีก เมื่อเราเข้าใจ Life cycle ของ component