Pada artikel sebelumnya, kami telah memberikan gambaran umum tentang Angular
. Pada bagian instruksi khusus, kami sudah bisa menulisnya, namun dalam skenario sebenarnya, kami masih memerlukan manajemen standar.
Angular adalah versi upgrade dari Angular.js. [Tutorial terkait yang direkomendasikan: "Tutorial Sudut"]
Jadi, dalam artikel ini, kami akan menggunakan Tooltip
untuk menjelaskan konten instruksi khusus.
Render online, sebagai berikut:
Struktur direktori
didasarkan pada proyek kode yang diterapkan pada artikel sebelumnya. Jalankan baris perintah:
# Masuk ke folder arahan $ cd arahan #Buat folder tooltip$ tooltip mkdir # Masuk ke folder tooltip $cd tooltip # Buat komponen tooltip $ ng buat tooltip komponen # Buat direktif tooltip $ ng menghasilkan direktif tooltip
Setelah menjalankan baris perintah di atas, Anda akan mendapatkan struktur direktori file app/directive/tooltip
sebagai berikut:
tooltip ├── tooltip // komponen tooltip │ ├── user-list.component.html // kerangka halaman │ ├── user-list.component.scss // gaya unik halaman │ ├── spesifikasi user-list.component .ts // File pengujian │ └── user-list.component.ts // file javascript ├── tooltip.directive.spec.ts // File pengujian └── tooltip.directive.ts // File arahan
Baiklah, Ini Saya menempatkan komponen pada level yang sama dengan tooltip
, terutama untuk memudahkan pengelolaan. Tentu saja ini berbeda-beda untuk setiap orang, Anda bisa meletakkannya di folder components
publik.
Tulis komponen tooltip
dalam file html
:
<div class="caret"></div> <div class="tooltip-content">{{data.content}}</div>
Dalam file gaya .scss
, terdapat:
$black: #000000; $putih: #ffffff; $ukuran sisipan: 6 piksel; $tooltip-bg: transparanisasi($hitam, 0.25); // transparanisasi adalah sintaks dari sass $grid-gutter-width: 30px; $warna-tubuh-bg: $putih; $waktu-aplikasi-anim: 200 md; $app-anim-curve: kemudahan; $std-batas-radius: 5 piksel; $zindex-maks: 100; // :pemilih kelas semu host, menyetel gaya untuk elemen komponen itu sendiri: host { posisi: tetap; bantalan: $lebar-selokan-grid/3 $lebar-selokan-grid/2; warna latar belakang: $tooltip-bg; warna: $body-bg-color; opacity: 0; transisi: semua $app-anim-time $app-anim-curve; perataan teks: tengah; radius-perbatasan: $std-radius-perbatasan; indeks-z: $zindex-max; } .caret {// lebar tanda sisipan: 0; tinggi: 0; batas kiri: 6px solid transparan; perbatasan-kanan: 6px solid transparan; batas bawah: 6px solid $tooltip-bg; posisi: mutlak; atas: -$ukuran sisipan; kiri: 50%; margin-kiri: -$ukuran sisipan/2; warna-batas-bawah: $tooltip-bg; }
Hmm~,
css
adalah hal yang ajaib, dan saya akan menyusun artikel untuk menjelaskan konten terkaitsass
...
Kemudian, isi file javascript
tooltip.component.ts
adalah sebagai berikut:
import { Komponen, ElementRef, //Elemen menunjuk ke HostBinding, Di Hancurkan, DiInit } dari '@angular/inti'; @Komponen({ selector: 'app-tooltip', // Identifier, menunjukkan apa nama komponen saya, ini app-tooltip templateUrl: './tooltip.component.html', // Kerangka komponen ini styleUrls: ['./tooltip.component.scss'] // Gaya pribadi komponen ini}) kelas ekspor TooltipComponent mengimplementasikan OnInit { data publik: apapun; // Tetapkan nilai pada direktif private displayTimeOut: any; // Dekorator yang berhubungan dengan pengikatan host pada komponen itu sendiri @HostBinding('style.top') hostStyleTop!: string; @HostBinding('style.left') hostStyleLeft!: string; @HostBinding('style.opacity') hostStyleOpacity!: string; konstruktor( elemen pribadiRef: ElementRef ) {} ngOnInit(): batal { this.hostStyleTop = ini.data.elementPosition.bottom + 'px'; if(ini.displayTimeOut) { clearTimeout(ini.displayTimeOut) } this.displayTimeOut = setTimeout((_: apa saja) => { // Hitung jarak antara tooltip dan sisi kiri di sini. Rumus perhitungannya di sini adalah: tooltip.left + .width elemen target - (tooltip.width/2) this.hostStyleLeft = this.data.elementPosition.left + this.data.element.clientWidth / 2 - this.elementRef.nativeElement.clientWidth / 2 + 'px' this.hostStyleOpacity = '1'; this.hostStyleTop = ini.data.elementPosition.bottom + 10 + 'px' }, 500) } // Komponen dimusnahkan ngOnDestroy() { // Setelah komponen dimusnahkan, hapus timer untuk mencegah kebocoran memori if(this.displayTimeOut) { clearTimeout(ini.displayTimeOut) } } }
Menulis instruksi tooltip
adalah fokus artikel ini. Saya akan menandai instruksi spesifik pada kode ~
Isi file yang relevan tooltip.directive.ts
adalah sebagai berikut:
import { ApplicationRef, // Deteksi panggilan global ComponentFactoryResolver, // Membuat objek komponen ComponentRef, // Asosiasi dan panduan instance komponen, menunjuk ke elemen yang dibuat oleh ComponentFactory Directive, ElementRef, EmbeddedViewRef, // EmbeddedViewRef mewarisi dari ViewRef dan digunakan untuk mewakili elemen UI yang ditentukan dalam elemen templat. HostListener, // Injektor mendengarkan acara DOM, // Input injeksi ketergantungan } dari '@angular/inti'; impor { TooltipComponent } dari './tooltip/tooltip.component'; @Direktif({ pemilih: '[appTooltip]' }) kelas ekspor TooltipDirective { @Input("appTooltip") appTooltip!: string; komponenRef pribadi!: ComponentRef<TooltipComponent>; // Mendapatkan posisi relatif dari elemen target, seperti kiri, kanan, atas, bawah dapatkan elemenPosition() { kembalikan this.elementRef.nativeElement.getBoundingClientRect(); } konstruktor( elemen yang dilindungiRef: ElementRef, appRef yang dilindungi: ApplicationRef, komponenFactoryResolver yang dilindungi: ComponentFactoryResolver, injektor terlindungi: Injektor ) {} //Buat keterangan alat dilindungi createTooltip() { ini.componentRef = ini.componentFactoryResolver .resolveComponentFactory(TooltipComponent) // Mengikat komponen tooltip.create(this.injector); this.componentRef.instance.data = { // Mengikat konten data data: this.appTooltip, elemen: this.elementRef.nativeElement, elemenPosition: ini.elementPosition } this.appRef.attachView(this.componentRef.hostView); //Tambahkan tampilan const domElem = (this.componentRef.hostView sebagai EmbeddedViewRef<any>).rootNodes[0] sebagai HTMLElement; dokumen.body.appendChild(domElem); } // Hapus keterangan alat perusakan yang dilindungiTooltip() { if(ini.componentRef) { this.appRef.detachView(this.componentRef.hostView); // Hapus tampilan this.componentRef.destroy(); } } // Dengarkan gerakan mouse ke @HostListener('mouseover') DiEnter() { ini.createTooltip(); } // Dengarkan gerakan mouse keluar@HostListener('mouseout') Keluar() { this.destroyTooltip(); } }
Pada titik ini, 99%
fungsi telah selesai. Sekarang kita dapat memanggilnya di halaman.
Di halaman tersebut, kami memanggil
kami untuk menambahkan konten berikut ke user-list.component.html
:
<p style="margin-top: 100px;"> <!-- [appTooltip]="'Halo Jimmy'" adalah poin kuncinya--> <rentang [appTooltip]="'Halo Jimmy'" style="margin-left: 200px; lebar: 160px; text-align: center; padding: 20px 0; tampilan: inline-block; border: 1px solid #999;" >Jimmy</span> </p>
Kita telah mendeklarasikan instruksi TooltipDirective
pada app.module.ts
, dan kita dapat memanggilnya secara langsung. Efek saat ini adalah sebagai berikut:
tooltip
yang kami terapkan ditampilkan di tengah bawah, yang biasanya kami gunakan dalam kerangka kerja, seperti atribut bottom
tooltip
dalam angular ant design
. Untuk atribut lainnya, jika pembaca tertarik, dapat diperluas.
Pada titik ini, kami dapat memelihara file instruksi yang kami tulis dengan baik.