真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Angular中如何自定義創(chuàng)建指令

小編給大家分享一下Angular中如何自定義創(chuàng)建指令,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

在德惠等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),成都營銷網(wǎng)站建設(shè),外貿(mào)網(wǎng)站建設(shè),德惠網(wǎng)站建設(shè)費(fèi)用合理。

指令介紹

在 Angular 中有三種類型的指令:

  • 組件,有模板的指令,組件是繼承于指令的,只是擴(kuò)展類與 UI 相關(guān)的屬性。

  • 屬性型指令,改變 DOM 元素、組件或其他指令的行為和外觀的指令。如,NgStyle、NgClass。

  • 結(jié)構(gòu)型指令,通過添加或移除 DOM 元素改變 DOM 布局的指令。如,NgIf、NgFor。

然而,在實(shí)際的開發(fā)中,根據(jù)業(yè)務(wù)的需要,我們經(jīng)常會(huì)拓展 Angular 組件的指令來方便業(yè)務(wù)的開發(fā)。下面讓我們來看看如何創(chuàng)建自己的指令。

創(chuàng)建屬性型指令

在 Angular 中,屬性型指令的創(chuàng)建至少需要一個(gè)帶有 @Directive 裝飾器的控制器類。這個(gè)裝飾器指定了一個(gè)選擇器名稱,用于標(biāo)識與指令相關(guān)聯(lián)的屬性名稱??刂破黝悓?shí)現(xiàn)了指令的功能行為。

接下來,我們創(chuàng)建一個(gè)簡單的指令,實(shí)現(xiàn)鼠標(biāo)在元素上懸停時(shí),改變起背景顏色;鼠標(biāo)移開時(shí),背景顏色消失;鼠標(biāo)點(diǎn)擊時(shí),字體變大;鼠標(biāo)松開時(shí),字體恢復(fù)原樣的功能。

指令實(shí)現(xiàn)

創(chuàng)建 background-exed.directive.ts 文件,實(shí)現(xiàn)如下代碼:

import { Directive, HostListener, ElementRef, Renderer2, HostBinding } from '@angular/core';

@Directive({
  selector: '[appBackgroundExe]'
})
export class BackgroundExeDirective {

  @Input('appBackgroundExe')
  highLightColor: string;

  constructor(private elementRef: ElementRef, private renderer: Renderer2) {
    // 這種寫法比較丑陋
    // this.elementRef.nativeElement.style.background = 'yellow';
    // 推薦這種寫法, Renderer
    this.renderer.setStyle(this.elementRef.nativeElement, 'background', 'yellow');
  }

  @HostBinding('class.pressed')
  isPressed: boolean;

  @HostListener('mouseenter')
  onMouseEnter(): void {
   this.highLight(this.highLightColor);
  }

  @HostListener('mouseleave')
  onMouseLeave(): void {
    this.highLight(null);
  }

  @HostListener('mousedown')
  onMouseDown(): void {
    this.isPressed = true;
  }

  @HostListener('mouseup')
  onMouseUp(): void {
    this.isPressed = false;
  }

  private highLight(color: string): void {
    // this.elementRef.nativeElement.style.background = color;
    this.renderer.setStyle(this.elementRef.nativeElement, 'background', color);
  }

}

其中,selector: '[appBackgroundExe]' 是指令關(guān)聯(lián)的屬性名稱,以便 Angular 在編譯時(shí),能從模板中找到與此指令關(guān)聯(lián)的 HTML 代碼。

構(gòu)造函數(shù)中,注入了 ElementRefRenderer2 模塊的實(shí)例。通過 ElementRef 我們可以引用指令標(biāo)識的 DOM 元素,并對其進(jìn)行相關(guān)的操作;并且可以利用 Renderer2 提供的 API 對元素進(jìn)行相關(guān)的渲染操作。

@HostListener@HostBinding 是屬性裝飾器。@HostListener 是用來為宿主元素添加事件監(jiān)聽;而指令標(biāo)記的元素,就是宿主元素。@HostBinding 是用來動(dòng)態(tài)設(shè)置宿主元素的屬性值。

設(shè)置字體樣式

  • appliation.component.less

.pressed {
  font-size: 30px;
}

在模板中使用指令

  • application.component.html


  鼠標(biāo)移進(jìn),元素變成紅色。鼠標(biāo)移出,元素紅色消失

創(chuàng)建結(jié)構(gòu)型指令

結(jié)構(gòu)型指令的創(chuàng)建與屬性型指令創(chuàng)建大同小異。

指令實(shí)現(xiàn)

import { Directive, Input, TemplateRef, ViewContainerRef } from '@angular/core';

@Directive({
    selector: '[appIf]'
})
export class IfDirective {

    constructor(
        private templateRef: TemplateRef,
        private viewContainerRef: ViewContainerRef
    ) { }

    @Input('ifCreat') 
    set condition(condition: boolean) {
       if (condition) {
         this.viewContainerRef.createEmbeddedView(this.templateRef);
       } else {
         this.viewContainerRef.clear();
       }
    }
}

其中,TemplateRef 表示內(nèi)嵌的 template 模板元素,通過它可以創(chuàng)建內(nèi)嵌視圖。ViewContainerRef 表示一個(gè)視圖容器,可以添加一個(gè)或多個(gè)視圖,通過它可以創(chuàng)建和管理基于 TemplateRef 實(shí)例的內(nèi)嵌視圖或組件視圖。

在模板中使用指令


  hello

以上是“Angular中如何自定義創(chuàng)建指令”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


文章名稱:Angular中如何自定義創(chuàng)建指令
URL標(biāo)題:http://weahome.cn/article/psdipj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部