Perbincangan ringkas tentang tiga jenis arahan dalam Angular: jenis komponen, jenis struktur dan jenis atribut

青灯夜游
Lepaskan: 2021-11-05 10:12:29
ke hadapan
3539 orang telah melayarinya
<p>Artikel ini akan membawa anda melalui arahan dalam Angular dan memperkenalkan tiga jenis arahan: arahan komponen, arahan struktur dan arahan atribut saya harap ia akan membantu anda.

<p>Perbincangan ringkas tentang tiga jenis arahan dalam Angular: jenis komponen, jenis struktur dan jenis atribut

<p>Terdapat tiga jenis arahan dalam Sudut:

  • Arahan komponen - komponen adalah kewujudan istimewa dan mempunyai templat
  • Struktur arahan - arahan yang mengubah reka letak DOM dengan menambah dan mengalih keluar elemen DOM yang biasa digunakan ialah: *ngIf, *ngFor, ngSwitch
  • Arahan atribut - arahan yang mengubah elemen, komponen atau lain-lain. arahan. Arahan yang biasa digunakan untuk penampilan dan tingkah laku ialah: NgClass, NgStyle
<p> [Cadangan tutorial berkaitan: "tutorial sudut"]

<p>arahan sudut——https://angular.cn/guide/built-in-directives

<p>Arahan komponen

<p> Apabila melihat kod sumber sudut, anda akan melihat yang berikut

<p>Perbincangan ringkas tentang tiga jenis arahan dalam Angular: jenis komponen, jenis struktur dan jenis atribut

<p>Jadi komponen mewarisi arahan, tetapi ia lebih istimewa dan mempunyai templat

<p>Sama, kerana arahan pewarisan komponen, siri operasi atribut dan arahan struktur berikut boleh dilaksanakan dalam komponen

<p> Walau bagaimanapun, kerana tujuan arahan adalah untuk menggunakan semula, operasi sedemikian tidak boleh dicapai dalam komponen Untuk tujuan ini, ia amat tidak disyorkan untuk beroperasi dengan cara ini

<p>Arahan jenis atribut

<p>Dikatakan di atas bahawa arahan jenis atribut digunakan untuk. menukar elemen dan komponen Atau rupa dan tingkah laku arahan lain

<p>Jadi bagaimanakah cara kita mencipta arahan berasaskan atribut kita sendiri?

<p>Pertama sekali, mencipta arahan adalah sama seperti mencipta komponen.

  • Import Directive penghias
  • Import simbol Input, TemplateRef dan ViewContainerRef, pilih
  • kepada arahan mengikut jenis arahan dan keperluan Tambah penghias pada kelas.
  • Tetapkan pemilih atribut CSS untuk mengenal pasti elemen dalam templat yang harus digunakan oleh arahan ini.
<p>Arahan jenis atribut tersuai

<p>1. Cipta arahan jenis atributappHighlightArahan: highlight.directive.ts

// 1、导入 Directive 装饰器
// 3、导入 ElementRef。ElementRef 的 nativeElement 属性会提供对宿主 DOM 元素的直接访问权限
import { Directive, ElementRef } from &#39;@angular/core&#39;;
// 2、@Directive() 装饰器的 selector 属性会指定指令的 CSS 属性选择器 [appHighlight]
@Directive({
  selector: &#39;[appHighlight]&#39;
})
export class HighlightDirective {
// 4、构造函数中使用 ElementRef 来注入宿主 DOM 元素的引用
  constructor(el: ElementRef) {
  	// 将对应元素的背景颜色设置为 黄色
     el.nativeElement.style.backgroundColor = &#39;yellow&#39;;
  }
}
Salin selepas log masuk
<p>Suka component dan pipe, directive juga perlu diisytiharkan dalam tatasusunan declarations untuk menggunakan

<p> 2. Penggunaan elemen hos

<p appHighlight>Highlight me!</p>
Salin selepas log masuk
<p>Mengendalikan acara pengguna

<p>Fungsi arahan berikut ialah:

  • <p>Boleh menerima 2 parameter, salah satu daripadanya ialah nilai lalai daripada yang lain

  • <p>Dengar acara masuk dan keluar tetikus bagi elemen hos Apabila memasuki, warna latar belakang hos ialah nilai yang dihantar di atas

.
import { Directive, ElementRef, HostListener, Input } from &#39;@angular/core&#39;;
 
@Directive({
   //指定指令的属性型选择器
   selector: &#39;[appHighlight]&#39;
})
 
export class HighlightDirective {
  @Input(&#39;appHighlight&#39;) highlightColor: string;
  @Input() defaultColor: string;

  //构造函数中使用 ElementRef 来注入宿主 DOM 元素的引用
  constructor(private el: ElementRef) { }

  //监听宿主元素 mousenter 事件
  @HostListener(&#39;mouseenter&#39;) onMouseEnter() {
	this.highlight(this.highlightColor || this.defaultColor);
  }
  
  //监听宿主元素 mouseleave 事件
   @HostListener(&#39;mouseleave&#39;) onMouseLeave() {
		this.highlight(null);
   }
 	// 修改背景颜色
   private highlight(color: string) {
		//ElementRef通过其 nativeElement 属性,提供直接访问宿主 DOM 元素的能力。
		this.el.nativeElement.style.backgroundColor = color;
  }
}
Salin selepas log masuk
<p>Penggunaan elemen hos

<p appHighlight="red" defaultColor="black">宿主元素</p>
Salin selepas log masuk
<p>Arahan struktur

<p>Tanggungjawab arahan struktur ialah reka letak HTML. Mereka membentuk atau membentuk semula struktur DOM, selalunya dengan menambah, mengalih keluar dan memanipulasi elemen hos yang dilampirkan padanya.
Arahan struktur terbina dalam biasa:

<p>Arahan struktur tersuai

<p>Kesannya ialah:

  • Jika syarat adalah palsu dan Angular belum mencipta paparan sebelum ini, penetap ini menyebabkan bekas paparan mencipta paparan terbenam daripada templat.
  • <p>Jika syarat adalah benar dan paparan dipaparkan pada masa ini, penetap ini mengosongkan bekas, yang menyebabkan paparan dimusnahkan.

<p>1. Cipta fail ts arahan: unless.directive.ts

// 1、导入 Input、TemplateRef 和 ViewContainerRef
import { Directive, Input, TemplateRef, ViewContainerRef } from &#39;@angular/core&#39;;
// 2、添加 Directive 装饰器
@Directive({ selector: &#39;[appUnless]&#39;})

export class UnlessDirective {
	private hasView = false;
	// 3、在指令的构造函数中将 TemplateRef 和 ViewContainerRef 注入成私有变量。
	constructor(
	  private templateRef: TemplateRef<any>,
	  private viewContainer: ViewContainerRef
	) { }
	
	// 4、添加一个带 setter 的 @Input() 属性 appUnless
	@Input() set appUnless(condition: boolean) {
		// 如果条件是假值,并且 Angular 以前尚未创建视图,则此 setter 会导致视图容器从模板创建出嵌入式视图。
	  if (!condition && !this.hasView) {
	    this.viewContainer.createEmbeddedView(this.templateRef);
	    this.hasView = true;
	  } else if (condition && this.hasView) {
	  	// 如果条件为真值,并且当前正显示着视图,则清除容器,这会导致销毁该视图。
	    this.viewContainer.clear();
	    this.hasView = false;
	  }
	}
}
Salin selepas log masuk
<p>2 Asterisk * sintaks pada arahan struktur (seperti
) ialah singkatan untuk apa yang ditafsirkan oleh Angular sebagai bentuk yang lebih panjang. Sudut menukarkan asterisk di hadapan arahan struktur kepada

mengelilingi elemen hos dan keturunannya.
<p *appUnless="condition">Show this sentence unless the condition is true.</p>
Salin selepas log masuk
<p> Contohnya: *ngIf<ng-template>

akan ditukar kepada <p>*ngIf

Angular tidak akan mencipta elemen
<div *ngIf="hero" class="name">{{hero.name}}</div>
Salin selepas log masuk
sebenar, ia akan cuma tukarkannya <p> dan

diberikan kepada DOM
<ng-template [ngIf]="hero">
  <div class="name">{{hero.name}}</div>
</ng-template>
Salin selepas log masuk
<p><ng-template><p>Contoh arahan tersuai注释节点占位符

<p>Arahan berikut akan mengalih keluar kotak input Semua ruang dalam

gunakan: <p>input

Kesan guna
import { Component, Directive, HostListener } from &#39;@angular/core&#39;
import { hostElement } from &#39;@angular/core/src/render3/instructions&#39;;
import { FormGroup, FormControl, Validators, NgControl } from &#39;@angular/forms&#39;
@Component({
    selector: "app-test",
    templateUrl: "./test.component.html",
    // declarations: [TestDirective]
})

export class TestComponent {
    constructor() {}
    ngOninit() {}

    firstName = &#39;&#39;;
    lastName = &#39;&#39;;

    profileForm = new FormGroup({
        firstName: new FormControl(&#39;aa&#39;, [Validators.required,Validators.pattern(&#39;[a-zA-Z0-9]*&#39;)]),
        lastName: new FormControl(&#39;&#39;, Validators.required),
    });

    onchange(event) {
        console.log(&#39;触发了onchange&#39;, this.firstName)
    }
}

@Directive({
    selector: &#39;[testDirective]&#39;,
    // host: {
    // 要传递传递事件参数,使用这种方法,不用的可以使用下面的 @HostListener 方法
    //   &#39;(keyup)&#39;: &#39;onkeyup($event)&#39;,   
    // }
})
export class TestDirective {
    constructor(public ngControl: NgControl) {}
    ngOnInit() {}
    // onkeyup(event) {
    @HostListener(&#39;keyup&#39;) onkeyup(event) {
    	// console.log("event", event)	// 事件参数
        console.log(this.ngControl)
        console.log(this.ngControl.control)
        console.log(this.ngControl.control.value)
        if(/\s+/g.test(this.ngControl.control.value)) {
        	// 只读属性,要通过 setValue 修改
            // this.ngControl.control.value = this.ngControl.control.value.replace(/\s+/g, &#39;&#39;)  
            this.ngControl.control.setValue(this.ngControl.control.value.replace(/\s+/g, &#39;&#39;))
        }
    }
}
Salin selepas log masuk
<p>Perbincangan ringkas tentang tiga jenis arahan dalam Angular: jenis komponen, jenis struktur dan jenis atribut
Nilai awal input di atas ialah aa, masukkan 空格字符 di tengah, mula-mula mencetus acara onchange dan kemudian mencetuskan acara keyup dalam arahan, menukar nilai firstName, dan kemudian mencetuskan semula acara onchange, jadi acara change dicetuskan dua kali secara keseluruhan.

<p>Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati: Pengenalan kepada Pengaturcaraan! !

Atas ialah kandungan terperinci Perbincangan ringkas tentang tiga jenis arahan dalam Angular: jenis komponen, jenis struktur dan jenis atribut. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:csdn.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan