วิธีการเขียนโปรแกรมจะทำในองค์ประกอบเอง ฉันพยายามสามสัปดาห์ในเรื่องนี้ แต่ยอมแพ้กับเอกสารเชิงมุมและอ่านรหัสจริงที่ทำให้เราเตอร์ทำงานได้และนั่นเป็นเอกสารที่ดีที่สุดที่ฉันสามารถหาได้
import {
Component,AfterContentInit,OnDestroy, ViewChild,OnInit, ViewChildren, AfterViewInit, ElementRef, Renderer2, QueryList,NgZone,ApplicationRef
}
from '@angular/core';
import { Location } from '@angular/common';
import { Subscription } from 'rxjs';
import {
ActivatedRoute,ResolveStart,Event, Router,RouterEvent, NavigationEnd, UrlSegment
} from '@angular/router';
import { Observable } from "rxjs";
import * as $ from 'jquery';
import { pairwise, map } from 'rxjs/operators';
import { filter } from 'rxjs/operators';
import {PageHandleService} from '../pageHandling.service'
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.scss']
})
export class HeaderComponent implements AfterContentInit,AfterViewInit,OnInit,OnDestroy{
public previousUrl: any;
private subscription: Subscription;
@ViewChild("superclass", { static: false } as any) superclass: ElementRef;
@ViewChildren("megaclass") megaclass: QueryList<ElementRef>;
constructor( private element: ElementRef, private renderer: Renderer2, private router: Router, private activatedRoute: ActivatedRoute, private location: Location, private pageHandleService: PageHandleService){
this.subscription = router.events.subscribe((s: Event) => {
if (s instanceof NavigationEnd) {
this.update();
}
});
}
ngOnInit(){
}
ngAfterViewInit() {
}
ngAfterContentInit(){
}
private update(): void {
if (!this.router.navigated || !this.superclass) return;
Promise.resolve().then(() => {
this.previousUrl = this.router.url
this.megaclass.toArray().forEach( (superclass) => {
var superclass = superclass
console.log( superclass.nativeElement.children[0].classList )
console.log( superclass.nativeElement.children )
if (this.previousUrl == superclass.nativeElement.getAttribute("routerLink")) {
this.renderer.addClass(superclass.nativeElement.children[0], "box")
console.log("add class")
} else {
this.renderer.removeClass(superclass.nativeElement.children[0], "box")
console.log("remove class")
}
});
})
//update is done
}
ngOnDestroy(): void { this.subscription.unsubscribe(); }
//class is done
}
หมายเหตุ :
สำหรับวิธีการโปรแกรมตรวจสอบให้แน่ใจว่าได้เพิ่มเราเตอร์ลิงค์และใช้องค์ประกอบลูก หากคุณต้องการเปลี่ยนสิ่งนั้นคุณต้องกำจัดลูกต่อsuperclass.nativeElement
ไป
@input
ตัวเลือกสำหรับ แต่exact: false
เปิดใช้งานคลาสเมื่อใดก็ตามที่พี่น้องของเส้นทางปัจจุบันใช้งานอยู่