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

typescript - วิธีการแทนที่เฉพาะคอมโพเนนต์จากไลบรารีของบุคคลที่สามและใช้เทมเพลต (html) และ CSS จากคอมโพเนนต์หลักใน Angular 4


วิธีการ override เฉพาะคอมโพเนนต์จากไลบรารีภายนอกและใช้เทมเพลต, CSS จากคอมโพเนนต์แม่ใน Angular 4?

1) จำเป็นต้อง override แม่แบบและ CSS หรือไม่ ในขณะที่ override ไลบรารีของบุคคลที่สามใน Angular?

2) งั้นมันไม่บังคับใช่ไหม แล้วให้ตัวอย่างเช่น วิธีการ override อย่างไร?

ฉันกำลังใช้ไลบรารีนี้ ngx-carousel ใน Angular 4 ของฉันและฉันต้องการแทนที่บนเมธอดเฉพาะจากคอมโพเนนต์ของไลบรารีและไม่ต้องการแทนที่ HTML และ CSS

คำตอบ #1

บางทีคำสั่งอาจทำสิ่งที่คุณต้องการได้

ในกรณีของฉัน ฉันต้องการสร้างซับคลาสของคอมโพเนนต์ โดยไม่ต้องเขียนทับเทมเพลต HTML ของเดิม ซับคลาสปกติจะต้องมีเทมเพลต HTML ใหม่ แต่ฉันต้องการเก็บเทมเพลต HTML เดิมไว้

ฉันใช้คำสั่ง Host และ Self จาก angular core เพื่อมอบหมายวิธีการบางอย่างของคลาสใหม่ ผลลัพธ์จะคล้ายกับการสร้างคลาสลูก

ขั้นตอน:

  • สร้างไฟล์ด้วยโค้ดต่อไปนี้ ฉันได้แก้ไขคอมโพเนนต์ปฏิทินของ primeng แล้ว แต่แน่นอนว่าคุณสามารถแก้ไขคอมโพเนนต์อื่นได้
  • เพิ่มคลาส (MyCalendar ในตัวอย่างนี้) ลงในส่วนการประกาศใน app.module.ts เช่นเดียวกับคอมโพเนนต์อื่น ๆ
  • เพิ่มคำสั่งเป็นแอตทริบิวต์ของ HTML ที่คุณใช้คอมโพเนนต์: <p-calendar myCalendar ...></...>

ตัวอย่างโค้ด (นี่ใช้ Angular 11 Angular 4 ยังคงได้รับการสนับสนุนหรือไม่?)

import {Directive, Host, Optional, Self} from "@angular/core";
import {Calendar} from "primeng/calendar";
@Directive({
    selector: '[myCalendar]',
})
export class MyCalendar {
    constructor(@Host() @Self() @Optional() public hostCalendar: Calendar) {
        hostCalendar.parseValueFromString = (text: string) => {
            return doSomething1(text);
        }
        hostCalendar.formatDateTime = (date: any) => {
            return doSomething2(date);
        }
    }
}