ค้นหาเว็บไซต์

javascript - Angular 2 : ตรวจสอบว่า routeName คือปัจจุบันหรือไม่


ฉันกำลังทำโครงการโดยใช้ Angular 2 และฉันกำลังพบปัญหา ฉันได้สร้างคอมโพเนนต์ลิงก์ขึ้นมา และฉันสามารถใช้งานมันได้แบบนี้ :

<cmp-link [routeName]="['Channel/Add']">Add channel</cmp-link>

คอมโพเนนต์นี้ตรวจสอบว่าเส้นทางปัจจุบันเหมือนกับเส้นทางที่ส่งผ่านพารามิเตอร์หรือไม่ และถ้าเหมือน จะมีการใช้คลาส ฉันจะตรวจสอบได้อย่างไรว่า URL ปัจจุบันเหมือนกับที่กำหนดโดย routeName หรือไม่? ก็ มันดูไม่สวยเลย

this.isCurrentRoute = this.normalize(currentUrl) === this.routeName[0].toLowerCase();

คุณไม่ชอบมันเหรอ ? ผมก็เหมือนกัน ผมอยากจะตรวจสอบว่ามีเส้นทางใดกำลังถูกเปิดใช้งานอยู่โดยใช้ชื่อตัวมัน

(ในกรณีนี้ Channel/Add คือชื่อเส้นทาง)

ฉันไม่เข้าใจวิธีการทำสิ่งนี้ โดยใช้ชื่อของเส้นทาง ฉันได้ดูที่ Router และ Instruction แล้ว

คำตอบ #1

วิธีแก้ปัญหาสำหรับการใช้งานเราเตอร์เก่า

ฉันคิดว่านี่น่าจะทำงานได้

router.isRouteActive(router.generate(['Home']))

นี่ไม่ใช่วิธีแก้ปัญหาที่ดีนัก แต่เป็นวิธีเดียวที่ฉันรู้

router.isRouteActive ต้องการ Instruction และไม่สามารถจัดการกับสตริงได้ด้วยตัวเอง ดังนั้นคุณจึงจำเป็นต้องสร้าง Instruction นี้ด้วย router.generate()

แหล่งที่มา: https://angular.io/docs/ts/latest/api/router/Router-class.html

หมายเหตุ

ดังที่ @Clément Flodrops กล่าวถึง สิ่งนี้ใช้ได้กับโครงสร้างการกำหนดเส้นทางแบบเรียบเท่านั้น เท่าที่ผมเห็น ยังไม่สามารถทำให้เรื่องนี้เป็นระเบียบเรียบร้อยได้

บางทีอาจเป็นไปได้ที่จะทำงานกับ _childeRouter ส่วนตัวของ Router แต่การเข้าถึงคุณสมบัตินี้ เราจำเป็นต้อง override คลาส Router

ดังนั้นฉันจึงแนะนำให้รอสักระยะ บางทีเราเตอร์อาจรองรับการดำเนินการนี้ได้ในสักวันหนึ่ง

แก้ไข: เราเตอร์ใหม่ 3.0.0-alpha

ด้วยเราเตอร์ใหม่ คุณสามารถเพิ่ม routerLinkActive="class" และสิ่งนี้จะเพิ่มคลาส หาก routerLink กำลังใช้งานอยู่

สามารถใช้ได้เช่นกัน หาก routerLink ไม่ได้อยู่บนแท็กที่มี routerLinkActive โดยตรง:

<li role="menuitem" routerLinkActive="active">
    <a href="" [routerLink]="['/home']" title="home" class="control-icon">
        <span class="fa fa-home"></span>
    </a>
</li>

บทความที่เกี่ยวข้อง